Хранилище данных DbContext

entity-framework entity-framework-6

Вопрос

Я читаю везде, что правильный способ получить свежие данные из базы данных - создать новый экземпляр DbContext и отказаться от существующего. Хотя это может быть obvoius для некоторых сценариев, мне трудно реализовать это в более сложном сценарии. Тип рассматриваемого приложения - клиентское приложение, где контекст живет до тех пор, пока отображается форма / представление.

Например, представьте, что мы добавляем некоторые данные типа A (это основные данные), а конкретный экземпляр типа A ссылается на объекты типа B и C (это данные, на которые ссылаются). Это означает, что на экране я мог бы загрузить список A, список B и список C. Давайте скажем, что список B получил некоторые изменения в сети, которые я хотел бы загрузить. Как я могу обновить список B без необходимости извлекать все три списка из базы данных (потому что, если я уничтожу контекст, это то, что мне нужно будет сделать?

obvoius mehod будет чем-то вроде

Context.Set<B>().AsNoCache().ToList();

которого у нас нет ...

Принятый ответ

Во время тестов я обнаружил, что единственным методом, который обновляет данные с текущими записями из базы данных (добавляется, обновляется и удаляется), является использование ObjectSet ObjectContext и установка MergeOption в OverwriteChanges (DbContext не предоставляет такой метод).

var objectContext = ((IObjectContextAdapter)Context).ObjectContext;
ObjectSet<T> set = objectContext.CreateObjectSet<T>();
set.MergeOption = MergeOption.OverwriteChanges;
var list = set.ToList();

Популярные ответы

Метод, который вы ищете, здесь

Context.Set<B>().AsNoTracking().ToList();


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему