NHibernate, как и большинство ORM-библиотек, использует шаблон UnitOfWork, чтобы управлять жизненным циклом таких объектов как сессия и транзакция. Обычно, чтобы не привязывать логику отображения к логике ORM, в приложениях пишется собственный класс UnitOfWork
, являющийся оберткой над сущностями ORM (NHibernate). Этот класс выглядит примерно так:
public class UnitOfWork: IUnitOfWork, IDisposable {
public UnitOfWork(){
// Создаем общую сессию NHibernate
}
public void Dispose(){
// Комитим изменения сессии или просто закрываем ее
}
}
Его использование в логике отображения:
using(CreateUnitOfWork()){
var item = new Item();
ItemRepository.Add(item);
}