2010-09-03 43 views
1

我有以下分貝結構:NHibernate的日誌表來跟蹤所有更改一個表

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

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

日誌表只需插入靠在使用者每次插入或編輯由記錄。我有日誌表的原因是,當提交訂單時,我可以簡單地將用戶日誌ID與訂單進行對照,這意味着我在訂單時具有用戶數據的表示。我想知道什麼是映射這個最好的方法?目前,我有兩個表的映射,讓我說:

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

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

我最大的到目前爲止的問題是,我不得不重新添加的每個字段中插入到日誌表時。我知道我可以創建一個構造函數來處理這個問題,但我想知道是否有更好的方法來處理這個問題。如果有人能幫忙,我會很感激。

感謝

回答

2

如果你只是關心映射代碼,你可以使用Automapper

您的代碼會看起來像(這是從我的頭頂,但我認爲這是有關的權利):

// 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>()); 

另外,如果你不喜歡其中的代碼是坐着,你可以看看使用Audit Event Listener