开发者

Status of Unsaved Entities

开发者 https://www.devze.com 2023-03-19 19:25 出处:网络
Consider the following code. var items = from i in context.Items select i; var item = items.FirstOrDefault();

Consider the following code.

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();

I'm trying to confirm that items2 will not include my modifications to item. In other words, items2's copy of item will not include the unsaved changes.


Have you tried it? =)

By default, your objects are being tracked and cached by the context, so that the objects in your second query actually do reflect changes in the first.

You may want to call context.Items.AsNoTracking() on the one of your two "items" to get the behavior you want.

Edit: Actually, this is a strange question. I just noticed that your items2 hasn't even hit the database yet, since you haven't called ToList() or FirstorDefault(). It remains an IQueryable that will hit the database after your code snippet and will therefore contain the changed value.

HOWEVER, if you call ToList() on items2, you'll encounter the caching scenario I outlined above.


In case of "var item" your query is executed the moment you used FirstOrDefault(). But for var items2 the query is still not executed. Now in your case result of items2 will always be affected by the updates you have done in the first query.


It will contain the modifications, only way to do is create a new context and query the new context.

0

精彩评论

暂无评论...
验证码 换一张
取 消