【问题标题】:How do I add a new record to objectStateEntryList in SaveChanges override如何在 SaveChanges 覆盖中向 objectStateEntryList 添加新记录
【发布时间】:2013-03-26 13:31:44
【问题描述】:

我有几个实体包含 EffectiveAsOf 和 ExpiredAsOf 的日期时间字段。当一个实体被修改时,我想覆盖 SaveChanges 方法,而不仅仅是更新现有实体,让代码将原始记录保存回数据库,并将 ExpiredAsOf 日期时间设置为当前时间,并插入一条新记录与新数据并且 EffectiveAsOf 设置为当前时间,ExpiredAsOf 设置为 null。

我知道 objectStateEntryList 中的 ObjectStateEntry 项包含 CurrentValues 和 Original values 对象,以及一个 Entity 对象。 EF 使用什么将数据写入数据库 CurrentValues 数据或实体?如何创建新条目?或者,我是不是完全走错了路?

我知道我可以在 EF 之外的实体中处理此问题,但希望 EF 自动检测和处理这些实体。

提前感谢您的帮助和洞察力, 吉姆

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-4.1 entity-framework-5


    【解决方案1】:

    默认情况下,EF 将同时使用两者 - 它使用原始值来检查并发问题(即,自从您从数据库加载数据后记录是否已更改)然后使用实体的当前/修改值来更新数据库记录。

    EF 不可能“自动检测和处理这些实体”。您将需要创建实体对象的新实例,从现有实体对象中复制值,在两个对象上设置适当的生效日期和过期日期,将新实体对象添加到 DbContext,然后保存更改。最好的方法是重写 DbContext 的 SaveChanges() 方法。为了使其尽可能干净和易于管理,我建议使用存储库模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2016-10-31
      • 2010-09-30
      • 2012-04-12
      相关资源
      最近更新 更多