Внутреннее кеширование DbContext (?) - PullRequest
11 голосов
/ 10 сентября 2010

Я создал свой собственный контекст, который наследуется от DbContext.Предположим, у меня есть 1 пост в моей таблице [Posts] в базе данных.Рассмотрим следующий сценарий:

  1. Я прошу DbContext об этом единственном сообщении для в первый раз .И DbContext возвращает его, как и ожидалось.
  2. Я изменяю один столбец в таблице [Posts] вручную .
  3. Я обновляю свой сайт = Я снова спрашиваю DbContext для этого сообщения.
  4. DbContext возвращает сообщение со старым значением для этого конкретного столбца!

Я просматривал SQL Profiler, и база данных срабатывает каждый раз, когда я обновляю свой сайт,так почему возвращаемый пост имеет старое значение?Я думаю, DbContext пытается быть очень умным и имеет какой-то внутренний механизм кэширования, но было бы неплохо сообщить мне, что он такой умный ...

Может кто-нибудь объяснить мне это?

1 Ответ

0 голосов
/ 11 июня 2014

Как ты "освежаешься"?Если вы знаете, что значение изменилось, вы можете обновить значение кэшированного контекста, используя ServerWins или ClientWins:

http://msdn.microsoft.com/en-us/library/vstudio/bb738618(v=vs.100).aspx

// Resolve the concurrency conflict by refreshing the 
// object context before re-saving changes. 
context.Refresh(RefreshMode.ClientWins, orders);

Однако реальный вопрос сводится к тому, когда и почему этопроизойдет в первую очередь, что связано с время жизни контекста.Возможно, вы могли бы чрезмерно использовать тот же контекст?Помните, что SQL Server и т. Д. Имеют свой собственный механизм кэширования, и, следовательно, Entity Framework - не единственная рыба в пруду элементов, пытающихся выполнить некоторое кэширование.

Из следующей ссылки мы собираем несколько советов, которыеесли бы вы следили, вы, вероятно, не столкнулись бы с этой проблемой.http://msdn.microsoft.com/en-us/data/jj729737.aspx

  • При загрузке большего количества объектов потребление памяти контекстом может быстро возрасти
  • Вероятность возникновения проблем, связанных с параллелизмом, увеличивается с увеличением времени жизни
  • Когдапри работе с веб-приложениями использовать экземпляр контекста для запроса
  • При работе с Windows Forms использовать контекст для формы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...