Я пытаюсь справиться с NHibernate, Fluent NHibernate и Spring.Реализация репозиториев с использованием NHibernate и Spring.Net
После домена управляемых дизайн принципалов, я пишу стандартную многоуровневую веб-приложение, состоящее из:
- презентационного уровня (ASP.Net)
- бизнес-уровня, включающий:
- прикладной уровень (в основном набор методов, видимых для уровня UI)
- интерфейсы репозитория и компоненты домена (используемые прикладным уровнем)
- настойчивости уровень (в основном реализация хранилища интерфейсов, определенных в бизнес-уровне)
Я хотел бы помощи в определении способа создания экземпляра NHibernate ISession таким образом, что он может использоваться несколько репозитории на протяжении всего срока службы одного запроса на бизнес-уровень. В частности, я хотел бы:
позволяет экземпляр ISession и любая сделка будут контролироваться outwith хранилища реализации
позволяет ISession (возможно, по какому-либо аспекту в рамках МОК, перехватчик?) экземпляр, доступный для хранилищ в удобном для восприятия образом (возможно, путем инъекции или с помощью некоторой общей абстракции контекста)
избегать создания ненужных транзакций (т.е. когда выполняются только операции только для чтения)
позволяет мне писать тесты, которые используют SQLLite
позволяют мне использовать Fluent NHibernate
позволяет реализации хранилища оставаться в неведении принимающей среды. Я еще не знаю, будет ли businese-уровень работать в процессе с уровнем представления или будет размещаться отдельно под WCF (в IIS), поэтому я не хочу слишком привязывать свой код к HTTP-контексту (например,).
Моя первая попытка решить эту проблему использовала шаблон реестра; сохраняя экземпляр ISession в свойстве ThreadStatic. Однако последующее чтение показало, что это не лучшее решение (поскольку, как мне кажется, ASP.Net может переключать поток в жизненном цикле страницы).
Любые мысли, решения частей, названия паттернов, указатели на современные образцы (NHibernate 2) будут с благодарностью восприняты.
Что касается FluentNhibernate, то есть также открытая jira: http://jira.springframework.org/browse/SPRNET-1232 Дополнительными источниками для песчаных может быть Документация: http://www.springframework.net/doc- last/reference/html/nh-quickstart.html Для IntegrationTesting suppport см. http://www.springframework.net/doc-latest/reference/html/testing.html#unit-testing. – tobsen