请考虑以下代码。
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}}副本不会包含未保存的更改。
答案 0 :(得分:1)
你试过吗? =)
默认情况下,上下文会跟踪和缓存您的对象,以便第二个查询中的对象实际上反映第一个查询中的更改。
您可能希望在两个“项目”之一上调用context.Items.AsNoTracking()以获得所需的行为。
编辑:实际上,这是一个奇怪的问题。我刚刚注意到你的items2还没有打到数据库,因为你还没有调用ToList()或FirstorDefault()。它仍然是一个IQueryable,将在您的代码片段后命中数据库,因此将包含更改的值。
但是,如果你在items2上调用ToList(),你会遇到我上面概述的缓存场景。
答案 1 :(得分:1)
如果是“var item”,则在使用FirstOrDefault()时执行查询。但是对于var items2,查询仍未执行。现在,在您的情况下,items2的结果将始终受您在第一个查询中所做的更新的影响。
答案 2 :(得分:0)
它将包含修改,唯一的方法是创建新的上下文并查询新的上下文。