#entity-framework #caching
#entity-framework #кэширование
Вопрос:
В следующем примере
using (var context = new MyEntities()
{
// Delete old data.
foreach (var data obsoleteData)
{
context.DeleteObject(data);
}
// Create new data.
var data = new DataEntity();
// Initialize data
// ...
var id = FoundItem();
var items = new List<MyItems>();
foreach (var n in context.Sources)
{
var subItems = (from i in context.Entities1
from g in i.Entity1Relations
where g.Type == 0 amp;amp; g.Id == id
select i).ToList();
Contract.Assert((from i in subItems
where i.SomeCount == 0 select i).FirstOrDefault() == null);
items.add(FindSource(n, subItems);
}
foreach(var i1 in items)
{
data.SubItems.Add(i1);
}
context.SaveChanges();
}
Иногда это подтверждается, но база данных SomeCount
всегда > 0!
Entity1Relations
— это таблица, которая разрешает m : n.
Я предполагаю, что entity Framework не запрашивает базу данных каждый раз.
Доступно ли решение этой проблемы?
Комментарии:
1. Можете ли вы опубликовать свою модель и описать, что вы делаете? Например. что такое
obsoleteData
, откуда это берется? Что вы делаете вInitialize data
разделе? Помимо этого, ваши соглашения об именовании мало что делают для понимания (Entities1
,Entity1Relations
?).2. Это упрощенный пример. Я использую стандартные сгенерированные объекты (из базы данных, сгенерированной в VS2010).
3. Это здорово. Как я упоминал в моем предыдущем комментарии — это могло бы помочь, если бы вы показали свою модель и пояснили, что вы пытаетесь сделать.
4. Я пытаюсь удалить старые данные, а затем заполнить базу данных новыми созданными данными. Они будут заполнены из разрешенных элементов (с некоторым идентификатором). Пожалуйста, обратите внимание, что разрешение основано на запросе таблицы отношений Entity1Relations. Я предполагаю, что context.Entities1 использует в этом случае кэшированные данные вместо реальных. Как гарантировать, что entity framework использует новые данные?
5. Какую версию EF вы используете?
Ответ №1:
Я обнаружил ошибку в FindSource, которая изменила свойство SomeCount других объектов. Так что это не имеет ничего общего с EF.