2009-06-21 9 views
3

Ich möchte DDD in einem neuen Projekt verwenden und zuerst meine Klassen modellieren und dann das Datenbankschema basierend auf der Klassenbibliothek generieren. Mein Plan ist, dies mit dem NHibernate hbm2ddl Tool SchemaExport zu tun.NHibernate SchemaExport und Configure() catch-22

Das Problem ist, dass ich nicht die SchemaExport wegen eines seltsamen Catch-22 Problems bekommen kann es in bringt mich zu arbeiten. Die SchemaExport erfordert ein Configuration Objekt, das selbst eine gültige NHibernate-Konfigurationsdatei sowie einen Satz erfordert von Datenbankzuordnungen.

Die Catch-22 ist hier, dass, wenn ich das Configure() zu tun, es "Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it." So ist die Configure() Methode beschwert, um die Tabelle zu bestehen erfordert, während die SchemaExport sollte es auf dem Configuration Basis zu schaffen, die ich nicht erstellen weil die Tabelle nicht existiert, existiert nicht.

So, wie auf der Erde bin ich verpflichtet, eine gültige NHibernate Configuration enthält die Zuordnungen erstellen soll für SchemaExport tatsächlich etwas tun, um nützliche ohne Configure() Wurf mit und beschweren sich, dass es nicht die Tabellen, die mit SchemaExport erstellten finden werden ? Gibt es einen "Modus", den ich das Configuration Objekt einstellen kann, so wird es die Datenbank für das Vorhandensein der gegebenen Tabellen nicht überprüfen, oder gibt es etwas anderes, das ich tun muss?

Antwort

9

Können Sie Ihre Konfigurationsdatei posten?

Ich verwende diese Methode die ganze Zeit ohne Tabellen und bin in der Lage, das Schema im laufenden Betrieb zu generieren. Ich vermute, dass Sie möglicherweise etwas in einer Ihrer .hbm-Dateien haben. Versuchen Sie, Ihr Schema auf 1 Tabelle herunterzuschneiden, um es zum Laufen zu bringen, und bauen Sie es dann von dort auf. Als Referenz ist hier der Code, den ich das DB-Schema zu generieren 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.

+2

Danke für den Tipp. Da ich das HBM nicht selbst schreibe, sondern es durch Fluent NHibernate dynamisch erzeuge, habe ich nicht bemerkt, dass ich einen Fehler in der "GetTableName" -Konvention hatte, der das Attribut 'table' im resultierenden HBM auf gesetzt hat eine leere Zeichenfolge. Meine Hände auf die generierten HBM-Dateien zu bekommen machte das Problem sehr klar und ich konnte es innerhalb einiger Sekunden beheben. Yay! :) –