Kann NHibernate überprüfen, ob das Datenbankschema generiert wurde?

8

Also, Neuling NHibernate Benutzer; Ich versuche, mein Gehirn darum zu wickeln.

Ich überlege, wie ich mit der Bereitstellung umgehen und später Add-ons in eine Web-App einfügen kann (was möglicherweise eigene Persistenzklassen erfordert).

Ich dachte, dass die Verwendung von SchemaExport für die Bereitstellung ziemlich gut funktionieren würde, aber ich frage mich, ob es auch einen Weg gibt, NHibernate dazu zu bringen, mir auf eine übliche, code-basierte Weise zu sagen, dass ein Schema-Export bereits durchgeführt wurde. oder nicht. Grundsätzlich möchte ich wie in diesem Pseudocode etwas machen:

%Vor%

wobei die beiden Funktionen intern SchemaExport bzw. SchemaUpdate verwenden würden.

EDIT: Leute, ich schätze die Antwort bis jetzt, aber sie vermissen den Punkt ein bisschen. Was ich versuche einzurichten, ist eine Möglichkeit für die Anwendung, Add-Ons hinzuzufügen und zu entfernen, die Änderungen an der Datenbank erfordern könnten. Ich spreche nicht über die Versionierung meines eigenen Codes oder dergleichen (zumindest nicht als primäre Funktion). Daher geht es weniger um die Bereitstellung der App als vielmehr um das Hinzufügen oder Entfernen eines Plug-ins. Wurde das This-Plugin (also die Pseudo-Code-Typ-Prüfung) zuvor implementiert? Wenn dies der Fall ist, führen Sie das Update aus. Wenn nicht, führen Sie den Export aus. Sinn machen?

    
Paul 15.06.2009, 19:18
quelle

5 Antworten

3

Nein, NHibernate tut nicht, was Sie fragen. Ich stelle mir vor, dass es möglich wäre, Code zu schreiben, der das Schema exportiert und dann mit dem Datenbankschema verglichen hat. Es wäre jedoch wahrscheinlich einfacher, in eine temporäre Datenbank zu exportieren und ein Tool von Drittanbietern wie Redgate SQL Compare zu verwenden, um die Schemas zu vergleichen.

Selbst wenn es das getan hat, was Sie fragen, sehe ich nicht, wie das bei der Bereitstellung helfen würde, da es den Zweck hat, eine Datenbank von Grund auf neu zu erstellen.

Bearbeitet zum Hinzufügen: Unter der Annahme, dass jedes Plugin über eigene Tabellen verfügt, können Sie bestimmen, ob das Schema mit einer der folgenden Methoden implementiert wurde:

  • Es wurde versucht, eines der Plugin-Objekte zu laden und die Ausnahme abzufangen.
  • Untersuchen Sie das Datenbankschema (mithilfe von SMO für SQL Server), um zu überprüfen, ob die Tabelle (n) vorhanden sind.
  • Erstellen Sie einen Datensatz in einer Tabelle, wenn ein Plug-in bereitgestellt wird.
Jamie Ide 15.06.2009, 19:39
quelle
16

Ich denke, dass Sie nach SchemaUpdate.Execute anstatt nach SchemaExport suchen. SchemaUpdate erstellt das Schema, wenn es nicht bereits existiert, oder aktualisiert es, falls erforderlich und gewünscht.

Das funktioniert für mich mit MSSQL und SQLite.

%Vor%     
Cocowalla 18.09.2009 18:50
quelle
9

Ja, zumindest in 3.0

%Vor%

Für den Aktualisierungsteil tun Sie das.

%Vor%     
Stefan Steiger 31.10.2010 11:44
quelle
2

Der Zweck des Schema-Exports besteht darin, das vollständige Schema von Grund auf neu zu erstellen. Wirklich nützlich, wenn Sie Ihre Anwendung noch nicht bereitgestellt haben.

Nach der ersten Bereitstellung würde ich sehr empfehlen, ein Migrations-Tool zu verwenden, das Ihnen bei weiteren Erweiterungen / Modifikationen des Schemas hilft. Wenn Sie etwas weiter nachdenken, werden Sie bemerken, dass Sie sogar eine Datenmanipulation benötigen (z. B. das Entfernen falscher Daten, die aufgrund eines Fehlers generiert wurden), wenn sich Ihre Anwendung weiterentwickelt. Das ist alles, was ein Migrationstool Ihnen helfen kann.

Sehen Sie sich Folgendes an:

Hier ist eine Liste von weiteren Migrationstools für .net, die in einer SO-Frage beantwortet wurden:

Die ursprüngliche Idee von Migrationen stammt von Ruby on Rails und wurde in der Vergangenheit in andere Frameworks "geklont". Deshalb ist es auch gut, über die ursprüngliche Idee in Ссылка zu lesen.

    
Michal 16.06.2009 01:27
quelle
0

Wenn Sie über VS Team Suite oder die Datenbankentwickler-Edition verfügen, können Sie Änderungen synchronisieren und verfolgen und dann ein Bereitstellungsskript erstellen, mit dem Sie die richtigen Objekte für Sie erstellen können. Auch RedGate hat ein Schema Compare-Produkt, das dasselbe tut, wenn ich mich nicht irre.

    
Webjedi 15.06.2009 19:43
quelle