5

NHibernate (または Fluent-NHibernate を使用) にテーブルが存在するかどうかを確認するための、最も一貫した最良の方法は何ですか?

それは可能ですか?つまり、このような頑丈な ORM にとっては単純な作業のように思えます。

また、関連する質問について、一連のテーブルまたはスキーマ全体が NHibernate に存在するかどうかを確認できますか?

4

3 に答える 3

12

NHibernate 構成をどこかに保存するか、セッション ファクトリを構築する前にそれを行うと、生成されたスキーマをデータベースに対して検証することができます。

    public void ValidateSchema(Configuration config)
    {
        new SchemaValidator(config).Validate();
    }
于 2009-10-14T19:10:13.037 に答える
3

SchemaUpdateのソースコードを調べました。SchemaUpdateが欠落しているテーブルを検出し、更新スクリプトではなく作成スクリプトを生成できることはわかっていました。案の定、答えはそこにありました。

テーブルがデータベースに存在しない場合、オブジェクト内のGetTableMetadata関数はnullを返します。NHibernate.Tool.hbm2ddl.DatabaseMetadata

通常、SchemaUpdateはDatabaseMetadataオブジェクトを作成し、オブジェクトに渡しConfigurationます。しかし、DatabaseMetadataを作成するために必要なのは、DBConnectionとDialectオブジェクトだけのようです。

SchemaUpdateは、次のようにDatabaseMetadataを作成します。

connectionHelper.Prepare();
connection = connectionHelper.Connection;
meta = new DatabaseMetadata(connection, dialect);

NHibernate.Cfg.Configurationその後、呼び出します

ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(...);
于 2009-10-13T01:50:07.367 に答える