Как зафиксировать две базы данных одновременно в NHibernate?
Мне нужно сохранять две базы данных зеркальными, но я не могу сделать это с зеркальным отображением SQL Server. Проект использует NHibernate 2.2 в качестве ORM.
Есть ли какой-нибудь возможный способ решить эту проблему? Например: любой плагин / расширение для NHibernate для сохранения в нескольких базах данных одновременно.
1 ответ
Решение
На Stackru есть несколько похожих вопросов. Направь это, это и это.
Вы должны создавать два SessionFactory
а также ISession
экземпляры, по одному для каждой базы данных. Далее вы должны использовать TransactionScope
и оберните ваши действия базы данных против нескольких баз данных в нем.
Следующий код скопирован из ответа " Ricardo Peres" на один из вопросов выше:
using (TransactionScope tx = new TransactionScope())
{
using (ISession session1 = ...)
using (ITransaction tx1 = session.BeginTransaction())
{
...do work with session
tx1.Commit();
}
using (ISession session2 = ...)
using (ITransaction tx2 = session.BeginTransaction())
{
...do work with session
tx2.Commit();
}
tx.Complete();
}