EF Code First DBContext Lifetime для веб-приложений - PullRequest
3 голосов
/ 18 мая 2011

Сначала мы разрабатываем веб-приложение ASP.NET с версией cEF.Какое / Где лучшее место для создания / размещения DBContext для запроса?У меня только один контекст, и я не использую никаких контейнеров DI.В настоящее время у меня есть несколько методов для вызова на запрос, и каждый создает свой собственный контекст.Как мне сказать, что-то вроде .. GetContextforRequest () и использовать его для запроса и распоряжаться им при обработке запроса?

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

1 Ответ

7 голосов
/ 18 мая 2011

То, что вы ищете с точки зрения наличия 1 контекста на запрос, является довольно хорошим способом использования контекстов, поскольку вы сокращаете накладные расходы на их создание. Вы можете создать новый контекст в BeginRequest и сохранить его в HttpContext.Current.Items, а в EndRequest избавиться от него.

Затем вы можете создать. Метод GetContextforRequest () для инкапсуляции выборки из HttpContext.Current.Items

Однако я бы посоветовал взглянуть на использование DI-контейнера. у большинства из них есть помощники, помогающие создавать и распоряжаться объектами по запросу.

Редактировать

Преимущество открытого контекста на время запроса заключается в том, что вы можете воспользоваться кэшированием 1-го уровня. Это где объекты кэшируются в течение всего времени существования контекста. Допустим, у вас есть таблица с именем User, содержащая группу пользователей, и вы дважды вызываете context.Set (). ToList () в одном запросе, первый вызов извлечет данные из базы данных, второй вызов извлечет их из кэш 1-го уровня.

...