未保存实体的状态

时间:2011-07-12 03:25:04

标签: entity-framework

请考虑以下代码。

var items = from i in context.Items
            select i;
var item = items.FirstOrDefault();
item.this = "that";
item.that = "this";

var items2 = from i in context.Items
             where i.this == "that"
             select i;
var data = items2.FirstOrDefault();

context.SaveChanges();

我正在尝试确认items2不会包含我对item的修改。换句话说,items2的{​​{1}}副本不会包含未保存的更改。

3 个答案:

答案 0 :(得分:1)

你试过吗? =)

默认情况下,上下文会跟踪和缓存您的对象,以便第二个查询中的对象实际上反映第一个查询中的更改。

您可能希望在两个“项目”之一上调用context.Items.AsNoTracking()以获得所需的行为。

编辑:实际上,这是一个奇怪的问题。我刚刚注意到你的items2还没有打到数据库,因为你还没有调用ToList()或FirstorDefault()。它仍然是一个IQueryable,将在您的代码片段后命中数据库,因此将包含更改的值。

但是,如果你在items2上调用ToList(),你会遇到我上面概述的缓存场景。

答案 1 :(得分:1)

如果是“var item”,则在使用FirstOrDefault()时执行查询。但是对于var items2,查询仍未执行。现在,在您的情况下,items2的结果将始终受您在第一个查询中所做的更新的影响。

答案 2 :(得分:0)

它将包含修改,唯一的方法是创建新的上下文并查询新的上下文。