我有以下代码:
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)