Я только начинаю изучать замок Виндзор.Задайте вопрос, стоит ли мне добавить еще одну единицу работы поверх Nhibernate ISession.
Я нашел это в уроке по windsor.
http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Six-Persistence-Layer.ashx
"Есть одна важная вещьХотя это и невидимый эффект от того, что мы только что сделали. Регистрируя компоненты, мы не просто рассказали Виндзору, как их создавать. Виндзор также позаботится о том, чтобы должным образом уничтожить экземпляры для нас, таким образом позаботившись об управлении их полным жизненным циклом.С точки зрения термина, Windsor удалит оба объекта, когда они больше не используются. Это означает, что он сбросит изменения, которые мы внесли в ISession, в базу данных для нас, и очистит ISessionFactory. И мы получим все это бесплатно ».
звучит так, что нам не нужно вносить изменения в базу данных, Виндзор позаботится об этом.Я предполагаю, что Виндзор сделает это после того, как страница будет закрыта или полностью загружена.
теперь я вижу, что другие люди добавляют еще одну единицу работы поверх Нибрената, подобную этой.
Просто любопытно, какой из них считается лучшей практикой?
UnitOfWork unitOfWork = new UnitOfWork(session);
Repository<Truck> repository = new Repository<Truck>(unitOfWork.Session);
Truck truck = CreateTruck(string.Format("Truck {0}", i + 1), 1000);
repository.Add(truck);
unitOfWork.Commit();
namespace RepositoryPattern.Data.Orm.nHibernate
{
public class UnitOfWork : IUnitOfWork
{
public ISession Session { get; private set; }
private readonly ITransaction _transaction;
public UnitOfWork(ISession session)
{
Session = session
Session.FlushMode = FlushMode.Auto;
_transaction = Session.BeginTransaction(IsolationLevel.ReadCommitted);
}
public void Commit()
{
if (!_transaction.IsActive)
{
throw new InvalidOperationException("Oops! We don't have an active transaction");
}
_transaction.Commit();
}
public void Rollback()
{
if (_transaction.IsActive)
{
_transaction.Rollback();
}
}
public void Dispose()
{
if (Session.IsOpen)
{
Session.Close();
}
}
}
}