0

我有几个实体包含EffectiveAsOf和ExpiredAsOf的日期时间字段。当一个实体被修改时,我想重写SaveChanges方法,而不是只更新现有的实体,让代码将原始记录保存到数据库,并将ExpiredAsOf datetime设置为当前时间,并用新数据插入一条新记录并且将EffectiveAsOf设置为ExpiredAsOf设置为null的当前时间。如何向SaveChanges中的objectStateEntryList中添加新记录覆盖

我知道,在objectStateEntryList的ObjectStateEntry项目包含CurrentValues和原始值对象,以及作为一个实体对象。 EF使用什么将数据写入数据库CurrentValues数据或实体?我如何着手创建一个新的条目?或者,我是否完全用错误的方式去做这件事?

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

预先感谢您的帮助和洞察力, 吉姆

回答

0

EF默认情况下,将同时使用 - 它使用原始值来检查并发问题(例如,如果因为您加载从数据记录已经改变DB)然后使用实体的当前/修改值更新数据库记录。

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

相关问题