Я прочитал смесь отзывов об устройстве работы и nhibernate с питомником репозитория. Похоже, что консенсус в том, что приведенное ниже неверно при использовании в классе репозитория.UnitOfWork Nhibernate, где должен работать unitofwork
public void UpdateCommit(T entity)
{
using (ITransaction transaction = Session.BeginTransaction())
{
Session.Update(entity);
transaction.Commit();
}
}
Насколько я понимаю, хранилище должно содержать только
public void Update(T entity)
{
Session.Update(entity);
}
Я тогда еще один класс для моей единицы работы.
Правильно ли в моем контроллере, чтобы впрыснуть единицу работы, а затем запустить следующий код:
_unitOfWork.BeginTransaction();
_portfolioRepository.Create(Mapper.Map<Portfolio>(model));
_unitOfWork.Commit();
В действительности мой веб-приложение и где я сохранить данные имеют portfoliorepository и UnitOfWork concreate класса впрыскивается и используется, а не используется
_portfolioRepository.UpdateCommit(entity).
Другими словами, если хранилище имеет какое-либо отношение к организации или совершению сделки. Или это должно быть обработано в контроллере или как часть жизненного цикла приложения или процесса перехвата.
http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle
Ищу передовой практики NHibernate и UnitOfWork
является его дополнительные накладные расходы, чтобы открыть сессию каждый в начало и конец запрашивать, когда может не потребоваться активность базы данных? – matt
NHibernate достаточно умен, чтобы не открывать соединение с базой данных, если это вам не нужно. Opensession() предназначен для быстрого вызова метода. Но некоторые из них будут созданы, так как вы все еще создаете новый объект – Fran