我正在创建一个域模型,稍后我将使用EF Code First映射到数据库。这是我的第一个使用Entity Framework的项目,虽然我已经读了一本关于它的书,但我记不起它的工作原理。
在域模型的一部分中,我有一对多的关系。
public class Parent
{
public IList<Child> Children { get; private set; }
}
在用户修改了Parent
的内存中实例并单击按钮后,就可以将该实例持久保存到数据库了。那时,我必须首先在数据库中存在的实例(保存之前)和内存中未保存的修改版本之间运行一些特定于域的比较逻辑。所以我需要查询数据库以检索Parent
实例及其Children
的未经修改的副本。
EF Code First让我安全地运行这样的查询吗?我只是担心当EF运行这样的查询时,它会看到每个Child
已经在内存中,因此重用这些实例,并覆盖它们的修改,而不是实例化重复。在这种情况下,我实际上想要重复。
答案 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集合中的单个值
执行此操作后续查询将提供一组具有当前数据库值的新实体,但如果要检查上下文保持的缓存,则这非常简单,如下所述: