我可以在保存更改之前查询修改后的对象吗?

时间:2013-10-11 03:43:20

标签: entity-framework ef-code-first

我正在创建一个域模型,稍后我将使用EF Code First映射到数据库。这是我的第一个使用Entity Framework的项目,虽然我已经读了一本关于它的书,但我记不起它的工作原理。

在域模型的一部分中,我有一对多的关系。

public class Parent
{
    public IList<Child> Children { get; private set; }
}

在用户修改了Parent的内存中实例并单击按钮后,就可以将该实例持久保存到数据库了。那时,我必须首先在数据库中存在的实例(保存之前)和内存中未保存的修改版本之间运行一些特定于域的比较逻辑。所以我需要查询数据库以检索Parent实例及其Children的未经修改的副本。

EF Code First让我安全地运行这样的查询吗?我只是担心当EF运行这样的查询时,它会看到每个Child已经在内存中,因此重用这些实例,并覆盖它们的修改,而不是实例化重复。在这种情况下,我实际上想要重复。

1 个答案:

答案 0 :(得分:0)

代码优先允许您访问被跟踪对象的原始值和更改值,如下所示:

Parent parent;
...
var curVal = context.Entry(parent).Property(p => p.Property).CurrentValue;
var origVal = context.Entry(parent).Property(p => p.Property).OriginalValue;

您还应该能够使用Children集合中的单个值

执行此操作

后续查询将提供一组具有当前数据库值的新实体,但如果要检查上下文保持的缓存,则这非常简单,如下所述:

http://weblogs.asp.net/ricardoperes/archive/2012/03/19/entity-framework-code-first-get-entities-from-local-cache-or-the-database.aspx