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();
}
Другие вопросы по тегам