Подтвердить что ты не робот

Внутреннее кэширование DbContext (?)

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

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

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

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

4b9b3361

Ответ 1

Как вы "освежаете"? Если вы знаете, что значение изменилось, вы можете обновить значение кэшированного контекста с помощью 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

  • При загрузке большего количества объектов потребление памяти в контексте может быстро увеличиваться
  • Шансы на работу в concurrency связаны с увеличением срока службы
  • При работе с веб-приложениями используйте экземпляр контекста для запроса
  • При работе с Windows Forms используйте контекст для формы