Entity Framework + несколько потоков + отложенная загрузка - PullRequest
9 голосов
/ 24 августа 2011

У меня проблемы с Entity Framework и несколькими потоками, и мне интересно, есть ли решение, которое сохраняет способность к отложенной загрузке.Насколько я понимаю, контекст данных не является потокобезопасным, поэтому, когда у меня несколько потоков, использующих один и тот же контекст данных, я получаю различные ошибки чтения данных.Решением этой проблемы является использование отдельного контекста данных для каждого соединения с базой данных, а затем уничтожение контекста данных.К сожалению, уничтожение моего контекста данных не позволяет мне выполнять отложенную загрузку.

Существует ли шаблон, позволяющий мне иметь общий контекст для всего приложения, но при этом правильно обрабатывать несколько потоков?

1 Ответ

10 голосов
/ 24 августа 2011

Нет, такого решения не существует. Ваш выбор в многопоточном приложении:

  • Контекст для потока
  • Единый контекст, создающий незащищенные отсоединенные объекты (без отложенной загрузки, без отслеживания изменений) с синхронизацией для каждого доступа к этому контексту.

Выполнение второго подхода с подключенными прокси-объектами - это путь к катастрофе. Потребуется обнаружить все скрытые взаимодействия с контекстом и синхронизировать связанный код. Вероятно, вы закончите однопоточным процессом, выполняющимся в нескольких потоках переключения.

...