Entity Framework иногда не загружает данные

#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.