我有这样的实体。让我们说名字是唯一的:
public class MyEntity
{
public Guid Id { get; set; } // immutable
public string Name { get; set; } // can be changed
// These are not exposed on the domain layer. They're just bookkeeping fields.
public string CreatedBy { get; set; }
public DateTime DateCreated { get; set; }
public string UpdatedBy { get; set; }
public DateTime DateUpdated { get; set; }
}
如果在调用SaveChanges()之前填充2个“已更新”字段,如果名称未更改,我的实体将被错误地标记为已更改。因此,我需要在DbContext上挂一个事件,以便在提交工作单元之前填充这两个字段,但仅限于实际已更改的实体。
这样的事件是否存在? nHibernate可以这样做吗?
答案 0 :(得分:3)
在ObjectContext API中,您可以直接在SavingChanges
上拥有事件ObjectContext
。您可以处理此事件并使用ObjectStateManager查找所有已修改/添加的实体,并根据需要处理它们。
在ObjectContext API和DbContext API中,您可以直接覆盖SaveChanges
方法并执行相同操作。
Fluent NHibernate只是NHibernate对代码中流畅映射的扩展。 NHibernate对此类场景有更好的支持 - 它提供custom listeners来处理这个问题。