Entity Framework 6 - некэшированные данные с внедрением зависимостей - PullRequest
0 голосов
/ 26 августа 2018

Я недавно обнаружил трудный способ, которым EF выполняет кеширование.У меня есть корневой viewmodel, который создает начальный DbContext.С каждой другой созданной моделью представления я передаю этот контекст.Таким образом, у меня есть только одно соединение, и у меня есть внедрение зависимости.

У меня есть функция в одной из моделей, которая изменяет состояние одной из сущностей.Когда я получаю попытку вернуть сущность из базы данных, статус остается неизменным (я предполагаю, что это связано с кэшированием).

Все остальные сообщения, которые я нашел (это для EF 6),хочет создать новый экземпляр класса, например:

var context = new MyContext();

, который бы работал, но это помешало бы мне иметь только одно соединение, а также исключило бы внедрение зависимостей.

Есть ли другой способ получить истинное значение сущности?

1 Ответ

0 голосов
/ 26 августа 2018

Это известная проблема с долгоживущими контекстами и системой отслеживания сущностей.

Класс DbEntityEntry предоставляет несколько методов для обновления данных в кэшированном объекте - Reload, GetDatabaseValues, а также для отделения объекта от трекера изменений (следовательно, кэша) путем установки Stateдо Detached.Но они применимы для одного лица, известного заранее.

Старые сервисы ObjectContext также позволяли выбирать поведение запроса с помощью перечисления MergeOption - AppendOnly, OverwriteChanges, PreserveChanges и NoTracking.Но все они пропали в DbContext сервисах, и единственная оставшаяся опция - без отслеживания запросов.

Так что в любое время, когда вы хотите быть уверенным, что вы получите реальное состояние базы данных, рассмотрите возможность использованиянет запросов отслеживания с использованием метода расширения .AsNoTracking().Просто имейте в виду, что возвращенные сущности в основном отключены, поэтому их изменение и применение изменений будет трудным делом и может привести к исключениям, таким как , когда сущность уже отслежена с тем же ключом и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...