Первое наблюдение: ваш репозиторий не должен фиксировать единицу работы.Это побеждает весь смысл единицы работы.Немедленно сохраняя свои изменения в репозитории, вы «микроуправляете» сессией NHibernate.
Единица работы должна указываться выше в стеке на уровне приложения / службы.Это позволяет вам иметь код приложения, который выполняет несколько действий, возможно, в разных репозиториях, и все же в конце фиксирует все сразу.
Сам класс UnitOfWork выглядит нормально, хотя вы должны спросить себя, действительно ли он вам нужен.В NHibernate ISession - это ваша единица работы.Ваш класс UnitOfWork, кажется, не добавляет много значения (тем более, что вы все равно выставляете свойство CurrentSession)
Но вам нужно подумать о его времени жизни.Я думаю, что вы ошибаетесь в этом вопросе.Управление временем жизни сеанса зависит от типа приложения, которое вы разрабатываете: в веб-приложении вам обычно требуется единица работы для каждого запроса (вы можете использовать Google для «сеанса nhibernate для каждого запроса»).В настольном приложении это немного сложнее, в большинстве случаев вам понадобится «сеанс на экран» или «разговор на бизнес-транзакцию».