Переключение соединения NHibernate на лету

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

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

  1. ИСПОЛЬЗОВАТЬ подчиненное устройство
  2. ВЫБЕРИТЕ ИЗ Т1
  3. ВЫБЕРИТЕ ИЗ Т2
  4. Мастер USE
  5. НАЧАТЬ СДЕЛКУ
  6. ОБНОВЛЕНИЕ T1
  7. ОБНОВЛЕНИЕ Т2
  8. СОВЕРШИТЬ ТРАНЗАКЦИЮ

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

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


person Pashec    schedule 17.01.2012    source источник


Ответы (1)


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

  • session.Disconnect(); session.Reconnect(connection) для переключения соединения.
  • возможно, используйте NHibernate.shards
person Firo    schedule 17.01.2012