花了很多时间,但仍然无法理解如何避免在 DbContext 中进行缓存。
我在下面附上了一些简单案例的实体模型来说明我的意思。
问题是 dbcontext 缓存结果。例如,我有下一个代码用于从我的数据库中查询数据:
using (TestContext ctx = new TestContext())
{
var res = (from b in ctx.Buildings.Where(x => x.ID == 1)
select new
{
b,
flats = from f in b.Flats
select new
{
f,
people = from p in f.People
where p.Archived == false
select p
}
}).AsEnumerable().Select(x => x.b).Single();
}
在这种情况下,一切都很好:我得到了我想要的(只有 Archived == false 的人)。
但是,如果我在其后添加另一个查询,例如,查询将存档标志设置为 true 的人的建筑物,我会遇到以下事情,我真的无法理解:
- 我之前的结果,即res,将由数据添加(也会添加带有 Archived == true 的 Persons )
- 新结果将绝对包含所有 Person 的,无论 Archived 等于什么
此查询的代码如下:
using (TestContext ctx = new TestContext())
{
var res = (from b in ctx.Buildings.Where(x => x.ID == 1)
select new
{
b,
flats = from f in b.Flats
select new
{
f,
people = from p in f.People
where p.Archived == false
select p
}
}).AsEnumerable().Select(x => x.b).Single();
var newResult = (from b in ctx.Buildings.Where(x => x.ID == 1)
select new
{
b,
flats = from f in b.Flats
select new
{
f,
people = from p in f.People
where p.Archived == true
select p
}
}).AsEnumerable().Select(x => x.b).Single();
}
顺便说一句,我在 TestContext 的构造函数中将LazyLoadingEnabled设置为 false。
有谁知道如何解决这个问题?我如何才能在查询中获得我在 linq to entity 中真正写的内容?
PS @Ladislav 你可以帮忙吗?