0

我正在创作一个域模型,稍后我将使用 EF Code First 将其映射到数据库。这是我第一个使用 Entity Framework 的项目,虽然我不久前读过一本关于它的书,但我不记得它是如何工作的所有细节。

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

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

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

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

4

1 回答 1

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

于 2013-10-11T14:31:58.167 回答