Как обновить / синхронизировать DbContext после внешних изменений в базе данных - PullRequest
0 голосов
/ 16 ноября 2018

Я использую Entity Framework 6, где по соображениям производительности я загружаю свои сущности в свой DbContext сразу, а затем использую их локально.До сих пор все изменения в базе данных проходили через DbContext, поэтому мои локальные объекты и база данных были синхронизированы.Однако теперь мне нужно вызвать хранимую процедуру в базе данных, что имеет побочные эффекты от внесения изменений в таблицы (вне DbContext), которые должны быть отражены в моих объектах.Под изменениями я имею в виду добавление новых записей и удаление / обновление существующих записей.

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

Насколько я понимаю, простой вызов Load() для всех моих DbSets из DbContext просто заменитсуществующие экземпляры.Поэтому любые объекты, использующие старые экземпляры сущностей, не будут работать

Итак, я подумал, что мог бы использовать метод Reload, такой как:

context.Entry(entity).Reload();

, который обновит мои локальные сущности, но я могу сделать это только для сущностей, которые DbContextуже знает о.Он не распространяется на НОВЫЕ сущности или УДАЛЕННЫЕ сущности, которые были созданы / удалены в результате выполнения хранимой процедуры.

Итак, я ищу способ:

  1. Загрузка из базы данных сущностей, которые НОВЫЕ для моего DbContext
  2. Перезагрузка существующих сущностей в моем DbContext
  3. Удаление всех удаленных сущностей из моего DbContext

Может ли кто-нибудь предложить какую-либо помощь в этом, пожалуйста?

Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

В общем случае EntityFramework может не знать об изменениях в базе данных и обновлении dbcontext. Для него нет оптимизированного или встроенного решения EntityFramework.

Я думаю, что вы можете использовать CDC в SqlServer, нажать change в вашем приложении и обновить dbcontext. Но это не приемлемое решение для всего бизнеса и сенарио

0 голосов
/ 16 ноября 2018

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

http://www.entityframeworktutorial.net/choosing-development-approach-with-entity-framework.aspx

Вот более подробная информация и руководство по стратегиям чтения данных:
https://www.c -sharpcorner.com / статьи / нетерпеливый-погрузо-ленивый-загрузочно-явная загрузка в Образованиях-структуре /

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

Говоря о SP, его можно просто отобразить с помощью мастера, который поставляется с Entity Framework и обернут методом.

Надеюсь, вы найдете эти ресурсы полезными!

...