Können Sie Abfragen in verschiedenen Datenbanken auf dem gleichen server mit 1 NHibernate-Sitzung?

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

  •  09-06-2019
  •  | 
  •  

Frage

Hat eine neue SessionFactory 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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top