1

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

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

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

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

4

1 回答 1

0

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

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

于 2013-03-26T18:43:07.797 回答