NHibernate с несколькими базами данных и транзакциями
У нас возникли проблемы с пониманием того, как лучше всего использовать NHibernate. Обычно у нас есть относительно большое количество довольно небольших (с точки зрения количества таблиц) баз данных SQL Server, а не одна база данных с большим количеством объектов.
Мы рассматриваем различные варианты обработки нескольких фабрик сессий и, вероятно, держим это под контролем. Однако мы не уверены, как бы мы обернули все вызовы в одну транзакцию. Используя свернутый вручную доступ к данным, вы просто обернули бы все это в TransactionScope, но мы немного неохотно делаем это с NHibernate, так как, похоже, ему нравится обрабатывать все его собственные транзакции.
Использование нескольких баз данных с общими транзакциями кажется тем, что многие люди хотели бы сделать с NHibernate.
Мы просто лаем не то дерево?
1 ответ
Вы можете безопасно использовать TransactionScope
, Но вы также должны открывать транзакции NHibernate.
Пример:
using (var ts = new TransactionScope())
using (var session1 = sessionFactory1.OpenSession())
using (var tx1 = session1.BeginTransaction())
using (var session2 = sessionFactory2.OpenSession())
using (var tx2 = session2.BeginTransaction())
{
//Do work...
tx1.Commit();
tx2.Commit();
ts.Complete();
}