Sprawdziłem kod źródłowy dla SchemaUpdate. Wiedziałem, że SchemaUpdate może wykryć brakującą tabelę, a następnie wygenerować skrypt tworzenia, a nie skrypt aktualizacji. Rzeczywiście, odpowiedź była tam.
Funkcja GetTableMetadata
w obiekcie NHibernate.Tool.hbm2ddl.DatabaseMetadata
zwróci wartość null, jeśli tabela nie istnieje w bazie danych.
Normalnie SchemaUpdate tworzy obiekt DatabaseMetadata i przekazuje go do obiektu Configuration
. Ale wygląda na to, że wszystko, czego potrzebujesz, aby utworzyć DatabaseMetadata to obiekt DBConnection and Dialect.
SchemaUpdate tworzy DatabaseMetaData wygląda następująco:
connectionHelper.Prepare();
connection = connectionHelper.Connection;
meta = new DatabaseMetadata(connection, dialect);
NHibernate.Cfg.Configuration
następnie wywołuje
ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(...);
Szukasz sprawdzić go przed swoim mapowania? –
tak czy inaczej, chcę sprawdzić, czy tabela fizyczna istnieje. –