2010-09-03 12 views
1

i ont la structure db suivante:NHibernate Log Tables à suivre toutes les modifications à une table

Users: 
- UserID 
- UserName 
- FirstName 
- LastName 
... 

UsersLog: 
- UserLogID 
- UserID 
- UserName 
- FirstName 
- LastName 
... 
- DateCreated 

Le tableau journal insère simplement un record contre l'utilisateur à chaque fois un insert ou modifier est faite. La raison pour laquelle j'ai la table de notation est que quand une commande est soumise je peux simplement enregistrer l'identification de journal d'utilisateur contre la commande qui signifie que j'ai une représentation des données d'utilisateur au moment de la commande. Je me demandais quelle est la meilleure façon de cartographier cela? Actuellement, j'ai deux tables cartographié ce qui me permet de dire:

var user = new User { ... }; 
userRepository.Insert(user); 

userLogRepository.Insert(new UserLog { User = user, UserName = user.UserName, FirstName = user.FirstName, ..., DateCreated = DateTime.UtcNow }); 

Mon plus gros problème est si loin que je dois ajouter à nouveau tous les champs lors de l'insertion dans la table de journal. Je sais que je peux créer un constructeur pour gérer cela, mais je me demandais s'il y avait une meilleure façon de gérer cela. J'apprécierais que quelqu'un puisse aider.

Merci

Répondre

2

Si vous êtes juste préoccupé par le code de mappage, vous pouvez utiliser Automapper

Votre code ressemblerait à quelque chose comme (ce qui est du haut de ma tête, mais je pense qu'il est bon):

// Call on app startup, don't try to set the UserLogId field 
Mapper.CreateMap<User, UserLog>() 
    .ForMember(log => log.UserLogId, opt => opt.Ignore());; 

// call when saving the user 
userLogRepository.Insert(Mapper.Map<User, UserLog>()); 

Sinon, si vous ne voulez pas où le code est assis, vous pouvez regarder à l'aide d'un Audit Event Listener