2009-08-26 7 views
1

J'utilise S # arp Architecture (qui utilise NHibernate). Certaines entités sont mappées à des tables dans une base de données et d'autres à une base de données différente. Divulgation: Les bases de données existent déjà ainsi je ne peux pas faire le modèle d'abord.S # arp Architecture/NHibernate avec plusieurs bases de données

Comment est-ce que je configure ceci pour fonctionner?

EDIT: La méthode SchemaIs dans Fluent NHibernate serait-elle l'approche recommandée pour mapper une entité à une table dans une base de données différente? Je crois que c'est aussi possible via les fichiers de mapping xmp de NHib.

Répondre

3

Vous devez utiliser NHibernateSession.AddConfiguration à la place pour une base de données supplémentaire. L'appel à NHibernateSession.AddConfiguration passe immédiatement sous NHibernateSession.Init(). Une clé de fabrique de session explicite devra être définie pour la seconde initialisation.

L'ensemble du processus est expliqué ici en détail.

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

2

La façon dont j'ai fait cela est d'initialiser plusieurs NHibernateSessions dans InitializeNHibernateSession dans global.asax.cs en utilisant plusieurs fichiers de configuration nhibernate. J'ai ensuite utilisé [Transaction ("nhibernate.dbname")] (nombase étant des noms assignés à WebSessionStorages) dans les contrôleurs par rapport à chaque méthode d'action appropriée.

+0

Pouvez-vous poster un échantillon de votre méthode de InitializeNHibernateSession s'il vous plaît? Merci. – LordHits

+0

Vous y voilà ... public override void Init() { base.Init(); webSessionStorage1 = nouveau WebSessionStorage (this, "nhibernate.db1"); webSessionStorage2 = new WebSessionStorage (this, "nhibernate.db2"); } ... InitializeNHibernateSession private void() { NHibernateSession.Init ( webSessionStorage1, nouvelle chaîne [] {Server.MapPath ("~/bin/MyProject.Data.dll")}, serveur .MapPath ("~/NHibernateDB1.config")); NHibernateSession.Init ( webSessionStorage2, nouvelle chaîne [] {Server.MapPath ("~/bin/MyProject.Data.dll")}, Server.MapPath ("~/NHibernateDB2.config")); } – Richard

+1

Que se passe-t-il si une action de contrôleur fonctionne à la fois sur la base de données? – Amitabh

Questions connexes