【问题标题】:How do I populate properties in an EF entity just before saving?如何在保存之前填充 EF 实体中的属性?
【发布时间】:2011-06-12 00:48:56
【问题描述】:

我有一个这样的实体。假设名称是唯一的:

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 可以做到这一点吗?

【问题讨论】:

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


【解决方案1】:

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

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

Fluent NHibernate 只是 NH​​ibernate 对代码中流畅映射的扩展。 NHibernate 对这种情况有更好的支持——它提供了custom listeners 来处理这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2017-08-26
    • 2021-01-30
    • 2012-09-27
    相关资源
    最近更新 更多