Я смотрю на реализацию шаблона IRepository с помощью NHibernate, и у меня есть вопрос, на который я не смог ответить при поиске в сети.
Предположим, у меня есть 3 репозитория, PersonRepository, PersonAddressRepository и PersonAccountRepository. Теперь предположим, что бизнес-логика диктует наличие процесса «Деактивация Person», который вызывает PersonRepository.Deactivate (), PersonAddressRepository.Deactivate () и PersonAccountRepository.Deactivate ().
Я хочу быть в состоянии сделать что-то вроде ..
using (ITransaction transaction = session.BeginTransaction()) {
session.Update(Person);
session.Update(PersonAddress);
session.Update(PersonAccount);
}
Чтобы при сбое любого из этих обновлений весь процесс откатывался назад в базе данных. Сейчас я понимаю NHibernate так: вы можете создавать сессию только для одного объекта, поэтому ..
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Person).Assembly);
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
using (ISession session = sessionFactory.OpenSession()) {
using (ITransaction transaction = session.BeginTransaction()) {
session.Save(Person);
}
Это правильно или я ошибаюсь? Каковы лучшие практики для Транзакций в отношении многостоловых обновлений и Транзакций в отношении NHibernate.
Заранее спасибо.