Можете ли вы запрашивать разные базы данных на одном сервере, используя 1 NHibernate Session? - PullRequest
1 голос
/ 11 сентября 2008

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

Ответы [ 2 ]

1 голос
/ 11 сентября 2008

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

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

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

0 голосов
/ 16 июля 2017

Общий случай

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

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

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

База данных конкретных случаев

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...