Провел много времени, но все же не может понять, как избежать кэширования в DbContext.EF 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();
}
В этом случае, все в порядке: я получил то, что я хочу (только лицо с архивной == лжи).
Но если добавить еще один запрос после него, например, запрос для зданий, у которых есть люди, которые архивировали флаг установлен в верно, у меня есть следующие вещи, что я на самом деле не можите понять:
- мой предыдущий результат, который Рез, будет добавлено по данным (там будут добавлены лица с архивными == тоже верно)
- новый результат будет содержать абсолютно все Индивидуальность человека, независимо от того, что архивации не сравняется
код этого запроса следующий:
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();
}
Кстати, я поставил LazyLoadingEnabled ложь в конструкторе TestContext.
Кто-нибудь знает, как решить эту проблему? Как я могу получить в своем запросе то, что я действительно пишу в своем linq для объекта?
P.S. @Ladislav, может быть, вы можете помочь?
какой вы прочитали код. То есть, что заставляет вас говорить, что у вас есть все в newResult? Поскольку запрос запрашивает объект Building и не более. – tschmit007
@ tschmit007 У здания есть свойство навигации, и каждая квартира имеет навигационное свойство People. Все это можно получить из newResult. – hvd
действительно, но свойство навигации, которое вы получаете, не имеет ничего общего с вашим выбором ** S **, поскольку вы получаете только b ('select (x => x.b)'). Таким образом, вы получаете все здание в каждом случае. – tschmit007