Можете ли вы запрашивать разные базы данных на одном сервере, используя 1 сеанс NHibernate?

StackOverflow https://stackoverflow.com/questions/56589

  •  09-06-2019
  •  | 
  •  

Вопрос

Делает ли новый SessionFactorй и Session объект должен быть создан для каждой базы данных?У меня есть хранилище данных для данных моего приложения и отдельное хранилище данных для безопасности моих сотрудников, которое используется для проверки пользователей.Нужно ли мне создавать новый объект SessionFactory и Session для вызовов к двум различным базам данных?

Это было полезно?

Решение

ОК, это не дает прямого ответа на ваш вопрос, но может дать представление о том, почему вам следует создавать несколько объектов сеанса для каждого хранилища данных.

Эта статья объясняет, как можно реализовать потокобезопасный отложенный синглтон для каждого типа сеанса, который вам нужен, чтобы у вас был только один сеанс для каждого хранилища данных, но он был общим для всего приложения.Таким образом, максимум у вас будет только 2 объекта сеанса.

Однако, чтобы напрямую ответить на ваш вопрос, вам понадобится 1 объект сеанса на каждую базу данных.

Другие советы

Общий случай

В общем случае ответ — нет, для общего случая нужны как минимум разные сеансы.

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

У этого есть некоторые недостатки, такие как отсутствие автоматического освобождения соединения после транзакций, отключение кэша второго уровня,...На мой взгляд, лучше иметь две фабрики сеансов, чем обеспечивать собственное соединение при открытии сеанса.

Конкретные случаи базы данных

В зависимости от используемого вами сервера базы данных вы можете использовать одну строку подключения для доступа к обоим с помощью NHibernate.Если вы можете использовать одну строку подключения, вы можете использовать одну фабрику сеансов и использовать один и тот же сеанс для доступа к объектам, разделенным между двумя базами данных.

Простейший случай

Используя SQL Server, вы можете разместить две базы данных на одном SQL-сервере.В таком случае вы можете использовать одну строку подключения и настроить catalog атрибут на вашем <class> сопоставления, указывающие, в какой базе данных следует найти таблицу.(schema также можно использовать, добавив точку.Он доступен в NHibernate уже давно, поэтому в старой версии у вас может быть только schema.)

Разумеется, учетные данные подключения должны быть действительными для доступа к обеим базам данных.

Другие случаи

Продолжая использовать SQL Server, если вторая база данных находится на другом сервере, вы можете использовать связанный сервер.Вы бы снова отрегулировали catalog атрибут классов, требующих его для указания соответствующего linkedServerName.DbName.

Возможно, в других базах данных могут быть аналогичные решения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top