Können Sie Abfragen in verschiedenen Datenbanken auf dem gleichen server mit 1 NHibernate-Sitzung?
-
09-06-2019 - |
Frage
Hat eine neue SessionFactor
y und Session
Objekt erstellt für jede Datenbank?Ich habe einen datenspeicher für meine Anwendung die Daten und einen separaten datenspeicher für meine Mitarbeiter Sicherheit, die ist verwendet, um zu überprüfen Benutzer.Muss ich eine neue erstellen, SessionFactory und Session-Objekt für Anrufe, die auf die 2 verschiedenen Datenbanken?
Lösung
ok so bedeutet dies nicht Ihre Frage direkt beantworten, aber es könnte einen Einblick bieten, warum Sie mehrere Sitzungsobjekte für jeden Datenspeicher erstellen sollten.
diesem Artikel erklärt, wie Sie einen Thread sicher faul Singleton implementieren kann jede Art von Session müssen Sie so, dass Sie nur eine Sitzung pro Datenspeicher haben, aber es ist über die gesamte Anwendung freigegeben. Also höchstens bist du immer nur zwei Sitzungsobjekte haben gehen.
Der direkte Weg zu Ihrer Frage aber beantworten, müssen Sie 1-Session-Objekt pro Datenbank.
Andere Tipps
Allgemein Fall
Die allgemeine Fall Antwort ist nein, müssen Sie zumindest verschiedene Sitzungen für den allgemeinen Fall.
Sie können eine einzelne Sitzung Fabrik verwenden, indem die OpenSession
Überlastung mit einer geöffneten Verbindung als Argument nehmen, so dass Sie Datenbank für die Sitzung wechseln erfordert es.
Dies hat einige Nachteile, wie Mangel an Verbindung Auto-Freigabe nach Transaktionen, von Second Level Cache zu deaktivieren, ... Besser zwei Sitzung Fabriken meiner Meinung nach, anstatt Ihre eigene Verbindung auf Sitzung Öffnung zu liefern.
Datenbank spezifische Fälle
auf dem Datenbankserver Je Sie verwenden, können Sie in der Lage sein, eine einzelne Verbindungszeichenfolge zu verwenden, um sowohl mit NHibernate erreichbar. Wenn Sie eine einzelne Verbindungszeichenfolge verwenden können, dann können Sie eine einzelne Sitzung Fabrik verwenden und die gleiche Sitzung verwenden für den Zugriff auf Ihre Einheiten aufgeteilt zwischen zwei Datenbanken.
Einfachstes Fall
Verwenden von SQL Server, können Sie Ihre zwei Datenbanken auf demselben SQL Server haben. In einem solchen Fall können Sie eine einzelne Verbindungszeichenfolge verwenden und das catalog
Attribut auf <class>
Mappings für das Erzählen in der Tabelle ist, die Datenbank einzustellen gefunden werden. (schema
kann auch verwendet werden, um einen Punkt anzuhängen. Es in NHibernate seit mehr verfügbar ist, so mit einer alten Version nur schema
haben.)
Natürlich müssen die Verbindungsanmeldeinformationen gültig für beide Datenbanken zugreifen.
Andere Fälle
Still SQL Server verwenden, wenn die zweite Datenbank auf einem anderen Server ist, können Sie einen Verbindungsserver verwenden. Sie würden einstellen erneut das catalog
Attribut auf Klassen, die es für die Angabe des entsprechenden linkedServerName.DbName
erforderlich ist.
Vielleicht andere Datenbanken könnten ähnliche Lösungen haben.