Шаблон репозитория - это абстракция, которая не является ненужной. Это просто позволяет вам заранее задавать определенные запросы, которые могут использоваться несколько раз по всей системе, и улучшает читаемость imho.
В репозитории используется единица работы (которая уже реализована ISession
в NHibernate); это моя точка зрения.
То, что я хотел бы сделать, - это создать несколько методов расширения ISession NHibernate для вашего проекта; который может выглядеть так:
public class ISessionExtensions
{
public static IEmployeeRepository GetEmployeeRepository( this ISession session )
{
return new EmployeeRepository(session);
}
}
public class EmployeeRepository()
{
internal EmployeeRepository( ISession s )
{
}
public IEnumerable<Employee> GetEmployeesFromDepartment( Department d )
{
...
}
}
Затем в своем коде вы можете сделать это:
using( ISession s = _sessionFactory.OpenSession() )
{
var repository = s.GetEmployeeRepository();
...
}