2010-06-11 6 views
2

Nous avons quelques problèmes pour comprendre comment utiliser NHibernate. Nous avons généralement un nombre relativement important de bases de données SQL Server assez petites (en termes de nombre de tables) plutôt qu'une base de données contenant beaucoup d'objets.NHibernate avec plusieurs bases de données et transactions

Nous étudions différentes options pour gérer plusieurs usines de sessions et nous avons probablement ce contrôle sous contrôle. Cependant, nous ne sommes pas sûrs de la façon dont nous emballerions tous les appels en une seule transaction. En utilisant l'accès aux données roulées à la main, vous pouvez tout emballer dans un TransactionScope, mais nous sommes un peu réticents à le faire avec NHibernate car il semble vouloir gérer toutes ses propres Transactions. L'utilisation de plusieurs bases de données avec des transactions partagées semble être le genre de chose que beaucoup de gens voudraient faire avec NHibernate.

Sommes-nous simplement en train d'aboyer le mauvais arbre entièrement?

+0

Vous pouvez regarder dans la source du projet NHibernate Sharding pour obtenir quelques idées parce qu'il semble que vous avez une base de données fragmentées. –

Répondre

3

Vous pouvez utiliser en toute sécurité TransactionScope. Mais vous devez également ouvrir les transactions NHibernate.

Exemple:

using (var ts = new TransactionScope()) 
using (var session1 = sessionFactory1.OpenSession()) 
using (var tx1 = session1.BeginTransaction()) 
using (var session2 = sessionFactory2.OpenSession()) 
using (var tx2 = session2.BeginTransaction()) 
{ 
    //Do work... 
    tx1.Commit(); 
    tx2.Commit(); 
    ts.Complete(); 
} 
+0

D'où référençons-nous TransactionScope? – learning

+0

TransactionScope est dans System.Transactions. Vous pouvez en installer un partout. Par ailleurs, j'attends juste le temps de tester cette réponse avant de l'accepter! – Gaz

+0

Le code fonctionne-t-il dans MySQL au lieu de SQL Server? – Pingpong

Questions connexes