NHibernate (または Fluent-NHibernate を使用) にテーブルが存在するかどうかを確認するための、最も一貫した最良の方法は何ですか?
それは可能ですか?つまり、このような頑丈な ORM にとっては単純な作業のように思えます。
また、関連する質問について、一連のテーブルまたはスキーマ全体が NHibernate に存在するかどうかを確認できますか?
NHibernate (または Fluent-NHibernate を使用) にテーブルが存在するかどうかを確認するための、最も一貫した最良の方法は何ですか?
それは可能ですか?つまり、このような頑丈な ORM にとっては単純な作業のように思えます。
また、関連する質問について、一連のテーブルまたはスキーマ全体が NHibernate に存在するかどうかを確認できますか?
NHibernate 構成をどこかに保存するか、セッション ファクトリを構築する前にそれを行うと、生成されたスキーマをデータベースに対して検証することができます。
public void ValidateSchema(Configuration config)
{
new SchemaValidator(config).Validate();
}
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(...);