NHibernate Schema und Konfigurieren () catch-22
-
06-07-2019 - |
Frage
ich verwenden möchte DDD in einem neuen Projekt und meine Klassen modellieren ersten, erzeugt dann das Datenbankschema auf der Klassenbibliothek basiert. Mein Plan ist, diese mit dem NHibernate hbm2ddl Werkzeug SchemaExport
zu tun.
Das Problem ist, dass ich nicht der SchemaExport
wegen eines seltsamen Catch-22 Problems arbeiten kann es bringt mich in. Die SchemaExport
erfordern ein Configuration
Objekt, das selbst eine gültige NHibernate-Konfigurationsdatei sowie eine Reihe von Datenbank erfordert Zuordnungen.
Der Catch-22 ist hier, dass, wenn ich die Configure tun (), es "Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it."
beschwert So ist die Configure()
Methode, um die Tabelle erfordert zu existieren, während die SchemaExport
soll es auf dem Configuration
Basis zu schaffen, die ich nicht, weil erstellen der Tisch ist nicht nicht vorhanden.
So, wie auf der Erde bin ich eine gültige NHibernate Configuration
enthält die Zuordnungen für SchemaExport
erforderlich erstellen soll Configure()
Wurf tatsächlich etwas Sinnvolles tun, ohne und beschweren sich, dass es nicht die Tabellen finden können, die mit SchemaExport
erstellt werden sollen? Gibt es ein „Modus“ ich das Configuration
Objekt festlegen kann in so es wird die Datenbank für die Existenz der angegebenen Tabellen nicht überprüfen, oder gibt es etwas, was ich tun muß?
Lösung
Können Sie Ihre Konfigurationsdatei schreiben?
Ich benutze diese Methode die ganze Zeit ohne Tabellen vorhanden ist, und bin in der Lage, das Schema on the fly zu generieren. Meine Vermutung ist, dass Sie etwas weg in einem Ihrer .hbm Dateien haben können. Versuchen Sie Ihr Schema auf 1 Schneidetisch, bekommen sie zu arbeiten, dann bauen sie von dort oben. Als Referenz ist hier der Code, den ich das DB-Schema zu erzeugen verwenden:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
Dies wird auch das Skript an die Konsole für Sie drücken, so kann man sehen, was SQL gegen den db erzeugt wird.