Управление объектным контентом ADO.NET Entity Framework в ASP.NET MVC - PullRequest
9 голосов
/ 16 декабря 2008

Я использую ADO.NET EF в приложении MVC. Я рассматриваю возможность размещения ObjectContext внутри HttpContext.Current, чтобы вся логика в одном запросе могла получить к нему доступ без необходимости открывать / уничтожать каждый раз. Однако я действительно уверен, что это хороший способ управления экземплярами ObjectContext. У меня есть 2 вопроса относительно этой необходимости:

  1. Поскольку свойство HttpContext.Current поддерживается локальным потоком полем, а ASP.NET использует потоки из пула для обработки запросов, возможно ли, что экземпляр ObjectContext, помещенный в HttpContext.Current по запросу, будет виден для последующий запрос выполняется в том же потоке из пула?

  2. Как вы думаете, как управлять ObjectContext в ASP.NET MVC, чтобы избежать как большого количества открытий / утилизации, так и предотвратить гонки?

Ответы [ 5 ]

5 голосов
/ 16 декабря 2008

Используйте шаблон Репозиторий . Переопределить контроллер. Утилизировать репозиторий, который, в свою очередь, удаляет DataContext.

2 голосов
/ 10 февраля 2009

Использование одного ObjectContext для запроса - хорошая идея.

Если вы обрабатываете это самостоятельно, вам нужно поместить контекст в коллекцию HttpContext.Items. В EndRequest вы должны убедиться, что контекст удаляется.

Как уже упоминалось, некоторые платформы IoC поддерживают этот OTB - обычно называемый PerRequest scope / life.

2 голосов
/ 16 декабря 2008

Я бы использовал контейнер IoC, такой как StructureMap, Autofac, Windosor и т. Д.

1 голос
/ 16 декабря 2008

Я согласен с Тоддом - используйте Dn / IoC cotnainer (Unity, Windsor) с продолжительностью жизни каждого потока (или пользовательского запроса).

Объявление 2, как я помню, в Linq to SQL объект DataContext считался легковесным объектом, поэтому его частое создание не должно быть проблемой. Надеюсь, это похоже на EF.

0 голосов
/ 17 декабря 2008

Спасибо за предложение IoC. Я использовал Unity и реализовал менеджер времени жизни для каждого запроса для хранения / получения объектов через HttpContext.Current Кажется, работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...