Каков рекомендуемый подход к шаблону Nhibernate + Repository?
Есть так много разных статей и мнений, что я не уверен, какой путь принять. Возьмите эту длинную статью, например. Он дает пример объектов Query, но каждый конкретный репозиторий принимает ISession
в своем конструкторе. Что мне нужно для NH-сессий в моем BL (бизнес-уровне)?
-
Создайте кучу репозиториев, каждая из которых имеет кучу определенных методов?
По-видимому, слишком много работы, потому что BL теперь "разрешено" знать NHibernate (Репозиторий - это новый Singleton)? -
Создать единый общий репозиторий, но выставить
IQueriable<T>
и использовать LINQ в BL
Время от времени возникает запрос, который LINQ-to-NHibernate не сможет обработать (или мне нужно настроить SQL вручную один раз в сотни запросов). Это легко с помощью специальных методов репо, но практически невозможно с кодом, основанным на LINQ. И использование обоих только потому, что LINQ в некоторых случаях нарушается, нонсенс. -
Объекты запроса
QueryOver
также является NH-специфическим, что означает, что BL снова осознает реализацию DAL. -
Еще один подход?
Очевидно, что мне нужно иметь возможность управлять транзакциями где-то, возможно, используя паттен-модуль Unit-of-work (хотя есть и много различных реализаций этого).