Vous pouvez interroger des bases de données différentes sur le même serveur à l'aide de 1 NHibernate Session?

StackOverflow https://stackoverflow.com/questions/56589

  •  09-06-2019
  •  | 
  •  

Question

Un nouveau SessionFactory et Session l'objet doit être créé pour chaque base de données?J'ai un magasin de données pour les données de mon application, et un autre magasin de données pour mon employé de la sécurité, qui est utilisé pour valider les utilisateurs.Dois-je créer un nouveau SessionFactory sna objet de Session pour les appels vers les 2 bases de données différentes?

Était-ce utile?

La solution

ok, donc ce n'est pas répondre directement à votre question, mais qu'il pourrait offrir un aperçu des raisons pour lesquelles vous devriez créer plusieurs objets de session pour chaque banque de données.

Cet article explique comment vous pouvez mettre en œuvre un "thread-safe" paresseux singleton pour chaque type de Séance que vous avez besoin de sorte que vous n'avez qu'une seule session par la banque de données, mais elle est partagée à travers l'ensemble de l'application.Donc, au plus, vous n'êtes jamais allez avoir 2 objets de session.

Pour répondre à votre question, cependant, vous aurez besoin de 1 objet de session par base de données.

Autres conseils

Cas général

Le cas général, la réponse est non, vous avez besoin d'au moins de séances différentes pour le cas général.

Vous pouvez utiliser une seule session d'usine à l'aide de la OpenSession la surcharge de prendre une connexion ouverte, comme argument, vous permettant de changer de base de données pour la session en a besoin.

Cela a quelques inconvénients, comme le manque de connexion auto-relâchement après les opérations, la désactivation du cache de second niveau, ...Mieux vaut avoir deux session usines à mon avis, plutôt que de fournir votre propre connexion sur l'ouverture de la session.

Base de données des cas spécifiques

Selon le serveur de base de données que vous utilisez, vous pouvez être en mesure d'utiliser d'une seule chaîne de connexion pour accéder à deux avec NHibernate.Si vous pouvez utiliser une seule chaîne de connexion, vous pouvez utiliser une seule session de l'usine et de l'utilisation de la même session pour accéder à votre entités partagé entre deux bases de données.

Plus simple des cas

À l'aide de SQL Server, vous pouvez avoir vos deux bases de données sur le même Serveur SQL.Dans de tels cas, vous pouvez utiliser une seule chaîne de connexion et d'ajuster la catalog l'attribut de votre <class> mappages pour raconter, dans lequel la base de données de la table se trouve.(schema peut également être utilisé, en ajoutant un point.Il est disponible dans NHibernate depuis plus longtemps, donc avec une ancienne version, vous ne peut avoir schema.)

Bien sûr, les informations d'identification de connexion doit être valable pour l'accès à deux bases de données.

D'autres cas

Toujours à l'aide de SQL Server, si la deuxième base de données est sur un autre serveur, vous pouvez utiliser un serveur lié.Vous réglez de nouveau l' catalog attribut sur les classes qui l'exigent pour la spécification appropriée linkedServerName.DbName.

Peut-être que d'autres bases de données pourrait avoir les mêmes solutions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top