2009-05-03 13 views
8

Ich mache meine ersten Schritte mit NHibernate und versuche, meine Tabellen automatisch aus den hbm-Dateien zu erstellen. Das Datenbank-Back-End ist SQL Server 2008 Developer Edition.NHibernate SchemaExport erstellt keine Tabellen, wenn "script" false ist

Dies ist der gemeinsame Beispielcode ich in NHibernate Tutorials sehen:

var cfg = new Configuration(); 
cfg.Configure(); 
cfg.AddAssembly(typeof(Posting).Assembly); 
new SchemaExport(cfg).Execute(false,true,false,false); 

Leider funktioniert das nicht. Ich habe show_sql auf "true" gesetzt und keine Anweisung ausgedruckt. Wenn ich den SQL-Profiler betrachte, sehe ich, wie sich meine Anwendung mit der DB verbindet, aber dann nichts tut.

Ich kann das Problem beheben, indem Sie den ersten Parameter zu ändern ("script") auf true:

new SchemaExport(cfg).Execute(true,true,false,true); 

Ich verstehe nicht, warum. Die Parameter von SchemaExport sind leider nicht wirklich erklärt (auch nicht der Unterschied zwischen .Create und .Execute), und ich möchte herausfinden, was dieser Parameter bewirkt und warum er nicht benötigt wird, zB bei Verwendung der SQL Compact Edition (das funktioniert auch wenn Skript ist falsch)

Antwort

27

Der SchemaExport ist Teil des Hbm2Ddl-Dienstprogramms, das wirklich von NHibernate-Funktionalität getrennt ist. Es verwendet nicht "show_sql", das verwendet wird, während NHibernate nur ausgeführt wird.

Um eine Kopie des Schemas erhalten Sie Sie .SetOutputFile (Dateiname)

Dies ist die Methode, die ich verwenden, verwenden erstellen, wenn ich eine neue Datenbank erstellen möchten. ich ein formatierte Schema in MyDDL.sql-Datei und die Datenbank aus dem Schema aufgebaut ist:

private void BuildSchema(Configuration config) 
{ 

     new SchemaExport(config) 
      .SetOutputFile(_fileName + "MyDDL.sql") 
      .Execute(true /*script*/, true /*export to db*/, 
        false /*just drop*/, true /*format schema*/); 
} 

SchemaExport.Create nur eine Verknüpfung mit dem gerade Schema.Execute true false und Format fallen.

public void Create(bool script, bool export) 
    { 
     Execute(script, export, false, true); 
    } 
+0

Ich benutze dies mit NHibernate 3.3, es schreibt in Datei, aber nicht in die Datenbank. –

Verwandte Themen