Должен ли класс базы данных PetaPoco создаваться один раз для каждого запроса или каждый раз, когда это необходимо?

Что делать с PetaPoco при создании класса Database? Мое приложение, вероятно, будет использовать различные репозитории (не совсем репозиторий DDD, скорее репозиторий шлюза) для инкапсуляции запросов.

Поскольку у меня будет несколько репозиториев, которым необходимо получить доступ к одному и тому же соединению с базой данных, я подумал о создании базового класса, который создает класс базы данных в конструкторе и вызывает Dispose в его деструкторе, и просто вызывает этот объект во всех производных классах, поэтому Я думаю, что в этом сценарии мне не понадобится блок использования (поскольку, когда класс выходит за рамки, он закрывает саму базу данных).

Я также подумал о том, чтобы просто создать объект базы данных в global.axax методом Application_BeginRequest, чтобы он был доступен на каждой странице, но я не совсем уверен, как это работает (я думаю, мне понадобится какой-то класс DatabaseManager, который его создает Я видел этот подход только с такими вещами, как NHibernate и RavenDB), и это, кажется, подталкивает использование объекта базы данных к самой странице ASPX, а не через класс репозитория/уровня данных, что кажется вонючим.

Любые предложения, какой из этих подходов, если таковые имеются, будет работать лучше всего? Я также видел, что PetaPoco поддерживает «общее соединение», так что я хочу обратить внимание на это, чтобы свести к минимуму количество открытых соединений с базой данных?


person Wayne Molina    schedule 18.05.2012    source источник


Ответы (1)


Обычно я создаю один Database для каждого запроса. Это легкий объект. Либо в ActionFilter используйте базовый класс Controller.

person Schotime    schedule 20.05.2012