То, что вы ищете с точки зрения наличия 1 контекста на запрос, является довольно хорошим способом использования контекстов, поскольку вы сокращаете накладные расходы на их создание. Вы можете создать новый контекст в BeginRequest и сохранить его в HttpContext.Current.Items, а в EndRequest избавиться от него.
Затем вы можете создать. Метод GetContextforRequest () для инкапсуляции выборки из HttpContext.Current.Items
Однако я бы посоветовал взглянуть на использование DI-контейнера. у большинства из них есть помощники, помогающие создавать и распоряжаться объектами по запросу.
Редактировать
Преимущество открытого контекста на время запроса заключается в том, что вы можете воспользоваться кэшированием 1-го уровня. Это где объекты кэшируются в течение всего времени существования контекста. Допустим, у вас есть таблица с именем User, содержащая группу пользователей, и вы дважды вызываете context.Set (). ToList () в одном запросе, первый вызов извлечет данные из базы данных, второй вызов извлечет их из кэш 1-го уровня.