Я посмотрел в исходном коде SchemaUpdate. Я знал, что SchemaUpdate может обнаружить отсутствующую таблицу и затем создать сценарий создания, а не сценарий обновления. Конечно же, ответ был там.
Функция GetTableMetadata
в объекте 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(...);