Шаблон «Единица работы» связан с транзакциями - я не понимаю, как он связан с этой проблемой.
GetAllPersonWithSameIdAsProduct
должен быть методом одного из ваших PersonRepository
- илитретий, более продвинутый, репозиторий - поскольку выше уровня репозитория у вас нет доступа к сеансу.Другой подход - заставить ваши репозитории принимать ICriteria
параметры и использовать класс построителя критериев для создания ваших сложных запросов.
Однако использование LINQ-To-NHibernate облегчит решение этих проблем, поскольку реализация IQueryable становится вашейрепозиторий, и ваши классы Service могут выполнять запросы с использованием LINQ, не зная, что они общаются с базой данных.