如何在保存之前填充EF实体中的属性?

时间:2011-06-09 18:09:11

标签: nhibernate entity-framework ef-code-first

我有这样的实体。让我们说名字是唯一的:

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可以这样做吗?

1 个答案:

答案 0 :(得分:3)

在ObjectContext API中,您可以直接在SavingChanges上拥有事件ObjectContext。您可以处理此事件并使用ObjectStateManager查找所有已修改/添加的实体,并根据需要处理它们。

ObjectContext APIDbContext API中,您可以直接覆盖SaveChanges方法并执行相同操作。

Fluent NHibernate只是NHibernate对代码中流畅映射的扩展。 NHibernate对此类场景有更好的支持 - 它提供custom listeners来处理这个问题。