2014-12-14 6 views
0

Я разрабатываю интернет-приложение MVC 5, и у меня есть вопрос относительно наличия более одного класса DbContext в controller.MVC 5 - Несколько DbContexts в контроллере

В моем DbContext классах есть много DbSet объектов для разных объектов модели. Ни один из моих модельных объектов не использует виртуальные объекты, однако мои модели просмотра используют виртуальные объекты в каждом контроллере.

Если контроллер ссылается на разные объекты DbSet в том же контроллере/результате действия, должен ли я использовать другой экземпляр DbContext для каждой ссылки DbSet? Я столкнулся со следующей ошибкой в ​​классе веба-службе, когда я пытаюсь получить доступ к различному DbSets, чтобы создать модель представления при использовании только один DbContext экземпляра:

сообщения = «Там уже находится открытая DataReader, связанная с этим Command который должен быть закрыт первым ».

Может ли это произойти при выполнении операции CRUD на объекте в контроллере MVC, когда различные DbSets обращаются, используя один и тот же класс DbContext?

Вот пример:

У меня есть контроллер MapLocationList, что при создании/редактировании MapLocationList объекта, следующие различные DbSet объекты доступны: Asset, MapLocation.

Какое количество накладных расходов возникает при использовании более одного экземпляра DbContext в контроллере MVC?

В принципе, мой вопрос заключается в том, должен ли использоваться другой экземпляр DbContext при доступе к различным DbSets в результате действия контроллера/действия?

Заранее спасибо.

ответ

0

Вам не нужно использовать разные экземпляры DBContext в вашем контроллере для доступа к различным DBS-файлам. (Лучшей практикой является использование одного и того же экземпляра в течение продолжительности запроса, который может обращаться к одному или нескольким DBS-файлам. Это может быть выполнено путем инъекции зависимостей или другими средствами, такими как ваш контроллер, имеющий переменную-член класса DBContext и удаляющую его когда контроллер установлен). Пока вы удаляете свой экземпляр dbcontext должным образом, использование одного и того же экземпляра несколько раз в контроллере в порядке. Ваша проблема в том, что у вас нет MultipleActiveResultSets (MARS). В строке подключения, вставьте следующий

MultipleActiveResultSets=True 

Более подробную информацию о MARS можно найти here

Смежные вопросы