Я использую архитектуру S # arp (которая использует NHibernate). У меня есть некоторые объекты, сопоставленные с таблицами в одной базе данных, а другие - с другой базой данных. Раскрытие информации: базы данных уже существуют, поэтому я не могу сначала создать модель.

Как мне настроить это на работу?

EDIT: будет ли метод SchemaIs в Fluent NHibernate рекомендованным подходом для сопоставления объекта с таблицей в другой базе данных? Я считаю, что это возможно и с помощью файлов отображения xmp NHib.

1
LordHits 27 Авг 2009 в 00:50

2 ответа

Лучший ответ

Вместо этого вы должны использовать NHibernateSession.AddConfiguration для дополнительной базы данных. Вызов NHibernateSession.AddConfiguration выполняется сразу в NHibernateSession.Init (). Для второй инициализации необходимо будет определить явный ключ фабрики сеанса.

Здесь подробно объясняется весь процесс.

https://github.com/sharparchitecture/sharp-architecture/wiki?Page=FAQ

3
Agha 1 Янв 2012 в 09:23

Я сделал это так, чтобы инициализировать несколько сеансов NHibernate в InitializeNHibernateSession в global.asax.cs с использованием нескольких файлов конфигурации nhibernate. Затем я использовал [Transaction ("nhibernate.dbname")] (dbname - это имена, присвоенные WebSessionStorages) в контроллерах для каждого соответствующего метода действия.

2
Richard 27 Окт 2009 в 16:27
Не могли бы вы опубликовать образец вашего метода InitializeNHibernateSession? Спасибо.
 – 
LordHits
28 Окт 2009 в 19:11
Вот и все ... публичное переопределение void Init () {base.Init (); webSessionStorage1 = новый WebSessionStorage (это, «nhibernate.db1»); webSessionStorage2 = новый WebSessionStorage (это, «nhibernate.db2»); } ... private void InitializeNHibernateSession () {NHibernateSession.Init (webSessionStorage1, new string [] {Server.MapPath ("~ / bin / MyProject.Data.dll")}, Server.MapPath ("~ / NHibernateDB1.config" )); NHibernateSession.Init (webSessionStorage2, новая строка [] {Server.MapPath ("~ / bin / MyProject.Data.dll")}, Server.MapPath ("~ / NHibernateDB2.config")); }
 – 
Richard
28 Окт 2009 в 19:49
1
Что, если одно действие контроллера работает с обеими базами данных?
 – 
Amitabh
5 Апр 2010 в 21:36
Я никогда этого не делал, но, возможно, действие могло вызвать два других метода в контроллере с аннотациями транзакций, ссылающимися на каждую БД?
 – 
Richard
7 Апр 2010 в 12:52