如何在SaveChanges覆盖中向objectStateEntryList添加新记录

时间:2013-03-26 13:31:45

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

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

我知道objectStateEntryList中的ObjectStateEntry项包含CurrentValues和Original值对象,以及Entity对象。 EF使用什么来向DB向CurrentValues数据或实体写入数据?如何创建新条目?或者,我是否完全以错误的方式解决这个问题?

我知道我可以在EF之外的实体中处理这个问题,但宁愿让EF检测并自动处理这些实体。

提前感谢您的帮助和见解, 吉姆

1 个答案:

答案 0 :(得分:0)

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

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