2009-08-26 7 views
1

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

Как настроить это для работы?

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

ответ

3

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

Весь процесс объясняется здесь подробно.

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

2

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

+0

Не могли бы вы опубликовать образец вашего метода InitializeNHibernateSession пожалуйста? Благодарю. – LordHits

+0

Здесь вы идете ... public override void Init() { base.Init(); webSessionStorage1 = новый WebSessionStorage (это, "nhibernate.db1"); webSessionStorage2 = новый WebSessionStorage (это, "nhibernate.db2"); } ... частная пустота InitializeNHibernateSession() { NHibernateSession.Init ( webSessionStorage1, новая строка [] {Server.MapPath ("~/бен/MyProject.Data.dll")}, сервер .MapPath ("~/NHibernateDB1.config")); NHibernateSession.Init ( webSessionStorage2, новая строка [] {Server.MapPath ("~/бен/MyProject.Data.dll")}, Server.MapPath ("~/NHibernateDB2.config")); } – Richard

+1

Что делать, если одно действие контроллера работает с обеих баз данных? – Amitabh

Смежные вопросы