Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 我可以在保存修改的对象之前查询它吗?_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 我可以在保存修改的对象之前查询它吗?

Entity framework 我可以在保存修改的对象之前查询它吗?,entity-framework,ef-code-first,Entity Framework,Ef Code First,我正在编写一个域模型,稍后将首先使用EF代码将其映射到数据库。这是我第一个使用实体框架的项目,虽然我不久前读过一本关于实体框架的书,但我记不起它是如何工作的所有细节 在域模型的一部分中,我有一个一对多的关系 public class Parent { public IList<Child> Children { get; private set; } } 公共类父类 { 公共IList子项{get;private set;} } 在用户修改了父对象的内存中实例并单击按钮后

我正在编写一个域模型,稍后将首先使用EF代码将其映射到数据库。这是我第一个使用实体框架的项目,虽然我不久前读过一本关于实体框架的书,但我记不起它是如何工作的所有细节

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

public class Parent
{
    public IList<Child> Children { get; private set; }
}
公共类父类
{
公共IList子项{get;private set;}
}
在用户修改了
父对象的内存中实例并单击按钮后,将是将该实例持久化到数据库的时候了。当时,我必须首先在数据库中存在的实例(保存前)和内存中未保存的修改版本之间运行一些特定于域的比较逻辑。因此,我需要查询数据库以检索
父实例及其
子实例的未修改副本


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

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

Parent parent;
...
var curVal = context.Entry(parent).Property(p => p.Property).CurrentValue;
var origVal = context.Entry(parent).Property(p => p.Property).OriginalValue;
您还应该能够使用Children集合中的单个值执行此操作

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


如何获取内存中的实例?最重要的是,如果EntityChangeTracker没有跟踪它,那么您需要“附加”它,并将其状态标记为“修改”,这样当您在上下文上调用SaveChanges时,它就可以知道它需要更新。如果您进行查询,它将被跟踪,但如果您只是“附加”,它也将被跟踪,并且所需时间更少。此代码帮助我可视化事物,但让我们回到我的问题:如果我在修改实例后但在它们被持久化之前运行查询,该查询(a)是否会返回一组全新的实例,(b)从数据库中更新内存中的“原始”值,而不覆盖“当前”值,或者(c)使我丢失修改后的值。