2013-06-20 4 views
5

Ich habe eine .NET 2008 MVC-Anwendung geerbt, die nhibernate verwendet. Der vorherige Entwickler hat es nicht geschafft, eine Datenbank für dieses Projekt zu erstellen. Ich bin ziemlich neu zu Nhibernate, und ich versuche herauszufinden, was wäre die optimale Lösung für die Erstellung eines Datenbankskript zum Erstellen einer neuen Datenbank mit den aktuellen Zuordnungen. Ich habe viele Beiträge auf dieser Seite durchgesehen, verstehe aber immer noch nicht vollständig, wie man das zum Laufen bringt. Jede Anleitung wird geschätzt.Erstellen eines Datenbankschema-Skripts aus NHibernate

Vielen Dank!

Antwort

6

Angenommen, Sie hbm.xml Mappings und eine gültige nhibernate Config-Datei haben, können Sie den folgenden Code in einer Konsole App schreiben die SQL-Schema zu generieren:

//load initial config from hibernate config file 
Configuration cfg = new Configuration().Configure("hibernate.cfg.xml"); 

//add assembly in which the hbm.xml mappings are embedded (assuming Product class is in this assembly) 
cfg.AddAssembly(typeof(Product).Assembly); 

//this will generate the SQL schema file in the executable folder 
new SchemaExport(cfg).SetOutputFile("schema.sql").Execute(true, false, false); 

Wenn Sie fließend Zuordnungen haben, sollte es aussehen mehr wie folgt:

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005).Mappings(
      m => m.FluentMappings.AddFromAssemblyOf<Product>()).ExposeConfiguration(
       config => 
        { 
         new SchemaExport(config).SetOutputFile("schema.sql").Execute(true, false, false); 
        }).BuildConfiguration(); 
+0

Danke! Ich habe fließende Abbildungen. Wenn Sie in einer Konsolenanwendung einen Code schreiben, wie kann ich diese Konsole an meine Lösung anhängen? Nochmals vielen Dank dafür! – ssokol91

+2

Fügen Sie Ihrer bestehenden Visual Studio-Lösung ein neues "Console Application" -Projekt hinzu. Oder Sie können diesen Code beim Start Ihrer bestehenden App oder in einer Veranstaltung hinzufügen, wo immer Sie möchten. – Bredstik

+0

Das ist großartig! Ich habe die Zeile "AddFromAssemblyOf " bemerkt. Muss ich das für jede abgebildete Klasse tun, oder verstehe ich es nicht richtig? Tks! – ssokol91