Где я должен хранить свой экземпляр контекста на сайте asp.net? - PullRequest
1 голос
/ 10 июля 2011

Я создаю веб-сайт asp и использую Entity Framework в качестве ORM.

Где я должен поместить свой экземпляр работы с фреймом сущности?

в настоящее время на каждом контроллере у меня есть закрытый член, который просматриваетнапример:

MyDBEntities mDbContext = new MyDBEntities();

Это означает, что при каждом запросе создается новый контроллер, который, в свою очередь, создает новый mDbContext.Более того, у меня есть mDbContext в поставщике членства (чтобы проверить, является ли пользователь участником) и в поставщике ролей (для проверки его роли) и в некоторых папках (для получения некоторых данных, которые представление не может предоставить), что означает, что яможет создать 3-4 подключения к БД для каждого запроса страницы?

Возможно, я что-то делаю не так, но как правильно это сделать?

Ответы [ 3 ]

1 голос
/ 14 марта 2014

Что касается контроллеров, то это нормально.Во многих примерах IoC с MVC рекомендуется использовать конструктор для вставки контекста в контроллер MVC, что почти одинаково.

Один экземпляр контекста в поставщиках членства / роли не очень хорошая идея, поскольку они являются одиночками.Рано или поздно контекст будет адресован нескольким потокам.Там должен быть контекст для каждого вызова метода.

Подробнее здесь: Что может вызвать много исключений доступа к данным, использующих сначала код EF в пользовательском RoleProvider? .

0 голосов
/ 13 марта 2014

Следуйте шаблону Unit Of Work, демонстрационное веб-приложение здесь .

0 голосов
/ 10 июля 2011

поместите логику вашей базы данных в класс базы данных (например, хранилище).

в этом хранилище вы можете использовать несколько методов (getallcustomers, savecustomer и т. Д.), Которые все создают новый объект MyDBEntities с оператором using:

using (MyDBEntities mDbContext = new MyDBEntities())
{
   //your db code here

}

Как я понимаю, создание объекта MyDBEntities - это не более, чем создание нового соединения в ADO.Net, поэтому это легкая операция.

вы можете вызывать методы хранилища из вашего контроллера.

если вам кажется, что вы используете метод довольно часто из контроллера (то есть несколько раз за запрос), вы можете рассмотреть возможность кэширования.

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