我有以下数据库结构:
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 });
到目前为止,我最大的问题是我必须在插入日志表时重新添加每个字段。我知道我可以创建一个构造函数来处理这个,但我想知道是否有更好的方法来处理它。如果有人可以提供帮助,我会很感激。
由于
答案 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