代码之家  ›  专栏  ›  技术社区  ›  nfplee

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

  •  1
  • nfplee  · 技术社区  · 14 年前

    我有以下数据库结构:

    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 回复  |  直到 14 年前
        1
  •  2
  •   David    14 年前

    如果您只关心映射代码,可以使用 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