Переключите соединение NHibernate на лету - PullRequest
1 голос
/ 17 января 2012

У нас есть WebServer (на основе Orchard CMS ) и две базы данных SQL Server: главная (операции чтения-записи) и ведомая (только операции чтения).Базы данных синхронизируются путем репликации.WebServer использует NHibernate в качестве ORM.

Мы хотим разделить нагрузку между этими двумя базами данных по следующей схеме.Во время обработки запроса у нас должно быть:

  1. ИСПОЛЬЗОВАНИЕ ведомого
  2. ВЫБРАТЬ ИЗ T1
  3. ВЫБРАТЬ ИЗ T2
  4. ИСПОЛЬЗОВАТЬ мастер
  5. НАЧАЛО СДЕЛКИ
  6. ОБНОВЛЕНИЕ T1
  7. ОБНОВЛЕНИЕ Т2
  8. СОВЕРШЕНИЕ СДЕЛКИ

Итак, идеяэто переключиться на базу данных master перед первым оператором изменения (UPDATE, DELETE, INSERT).Важное замечание: в существующей инфраструктуре для организации транзакций используется класс .Net TransactionScope .

Итак, как этого добиться с помощью NHibernate?

1 Ответ

2 голосов
/ 17 января 2012

некоторые отправные точки:

  • session.Disconnect(); session.Reconnect(connection) для переключения соединения.
  • возможно использовать NHibernate.shards
...