Общий случай
В общем случае ответ отрицательный, для общего случая нужны как минимум разные сеансы.
Вы можете использовать одну фабрику сеансов, используя перегрузку OpenSession
, принимая открытое соединение в качестве аргумента, что позволяет переключать базу данных для сеанса, для которого она требуется.
У этого есть некоторые недостатки, такие как отсутствие автоматического освобождения соединения после транзакций, отключение кэша второго уровня, ... На мой взгляд, лучше иметь две фабрики сеансов, чем предоставлять собственное соединение при открытии сессии.
База данных конкретных случаев
В зависимости от сервера базы данных, который вы используете, вы можете использовать одну строку подключения для доступа к обоим с помощью NHibernate. Если вы можете использовать одну строку подключения, то вы можете использовать одну фабрику сеансов и использовать один и тот же сеанс для доступа к вашим сущностям, разделенным на две базы данных.
Простейший случай
Используя SQL Server, у вас могут быть две базы данных на одном и том же SQL Server. В таком случае вы можете использовать одну строку подключения и настроить атрибут catalog
в ваших сопоставлениях <class>
, чтобы указать, в какой базе данных должна быть найдена таблица. (schema
также можно использовать, добавив точку. Она доступна в NHibernate более давно, поэтому в старой версии вы можете иметь только schema
.)
Конечно, учетные данные соединения должны быть действительными для доступа к обеим базам данных.
Другие случаи
Все еще используя SQL Server, если вторая база данных находится на другом сервере, вы можете использовать связанный сервер. Вы должны снова настроить атрибут catalog
в классах, требующих его для указания соответствующего linkedServerName.DbName
.
Возможно, другие базы данных могут иметь аналогичные решения.