2009-05-03 7 views
8

NHibernateで私の最初のステップを踏んで、hbmファイルからテーブルを自動的に作成しようとしています。データベースバックエンドはSQL Server 2008 Developer Editionです。NHibernate SchemaExportは "script"がfalseのときにテーブルを作成しません。

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

悲しいことに、これは動作しません:

これは、NHibernateのチュートリアルでは、私が見る共通のサンプルコードです。私はshow_sqlをtrueに設定しており、文を出力しません。 SQLプロファイラを見ると、私のアプリケーションはDBに接続していますが、何もしません。

私がtrueに最初のパラメータ(「スクリプト」)を変更することでこれを修正することができます

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

私は理由を理解していません。 SchemaExportのパラメータは悲しいかなか実際には説明されていません(.Createと.Executeの違いでもありません)。このパラメータが何をしているのか、SQLコンパクトエディションを使用しているときscript is false)

答えて

27

SchemaExportは、Hibernateの機能とはまったく別のHbm2Ddlユーティリティの一部です。 NHibernateが実行されている間だけ使用される "show_sql"は使用しません。

あなたは.SetOutputFile(ファイル名)を使用して作成したスキーマのコピーを取得するには

これは、私は新しいデータベースを作成したいとき、私が使用する方法です。 私はMyDDL.sqlファイルでフォーマットされたスキーマを取得し、データベースはスキーマから構築されています:

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はちょうど真偽と形式をドロップするとSchema.Executeにただのショートカットです。

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

これをNHibernate 3.3で使用していますが、これはファイルに書き出しますが、データベースには書き込まれません。 –

関連する問題