NHibernate日志表跟踪表的所有更改

时间:2010-09-03 00:00:49

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有以下数据库结构:

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 });

到目前为止,我最大的问题是我必须在插入日志表时重新添加每个字段。我知道我可以创建一个构造函数来处理这个,但我想知道是否有更好的方法来处理它。如果有人可以提供帮助,我会很感激。

由于

1 个答案:

答案 0 :(得分: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