实体框架查询返回不符合条件的实体

时间:2017-10-31 09:52:55

标签: c# entity-framework

我有以下代码:

Book book1 = await DbContext.Set<Book>().Where(x => x.Code == 1).FirstOrDefaultAsync();
book1.Code = 2;

DbContext.Entry<Book>(book1).State = EntityState.Modified

//This returns book, where book2.Code == 2
Book book2 = await DbContext.Set<Book>().Where(x => x.Code == 1).FirstOrDefaultAsync();

//This returns null
Book book3 = await DbContext.Set<Book>().Where(x => x.Code == 2).FirstOrDefaultAsync();

我认为我知道为什么会发生这种情况:查询进入数据库,抓取Code == 1得到它的书(DbContext.SaveChanges()尚未被调用)。然后实体到达ChangeTracker,发现有另一个实体具有相同的Id(但不同的Code),将这两个对象合并为一个并返回它。因此,返回的实体具有Code == 2

我的问题是,是否有办法防止这种行为,即。我希望DbContext返回满足查询条件的实体,无论它们是从数据库中获取还是由ChangeTracker跟踪。

(使用Entity Framework 6.2.0)

0 个答案:

没有答案