EnsureCreatedAsync メソッドと EnsureDeletedAsync メソッドを使用すると、データベース スキーマを管理するための Migrations に代わる軽量の代替手段が提供されます。 これらのメソッドは、データが一時的であり、スキーマが変更されたときに削除できるシナリオで役立ちます。 たとえば、プロトタイプの作成中、テスト中、またはローカル キャッシュの場合などです。
一部のプロバイダー (特に非リレーショナルプロバイダー) では移行がサポートされていません。 これらのプロバイダーでは、多くの場合、EnsureCreatedAsync がデータベース スキーマを初期化する最も簡単な方法です。
警告
EnsureCreatedAsync と移行は連携してうまく機能しません。 移行を使用している場合は、EnsureCreatedAsync を使用してスキーマを初期化しないでください。
EnsureCreatedAsync から Migrations への移行はシームレスなエクスペリエンスではありません。 これを行う最も簡単な方法は、データベースを削除し、Migrations を使用して再作成することです。 将来的に移行を使用する予定がある場合は、EnsureCreatedAsyncを使用するのではなく、移行から始めるのが最善です。
EnsureDeletedAsync
EnsureDeletedAsync メソッドは、データベースが存在する場合は削除します。 適切なアクセス許可がない場合は、例外がスローされます。
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync は、データベースが存在しない場合にデータベースを作成し、データベース スキーマを初期化します。 テーブルが存在する場合 (別の DbContext クラスのテーブルを含む)、スキーマは初期化されません。
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
ヒント
これらのメソッドの非同期バージョンも使用できます。
SQL スクリプト
EnsureCreatedAsyncによって使用される SQL を取得するには、GenerateCreateScript メソッドを使用できます。
var sql = dbContext.Database.GenerateCreateScript();
複数の DbContext クラス
EnsureCreated は、データベースにテーブルが存在しない場合にのみ機能します。 必要に応じて、独自のチェックを記述してスキーマを初期化する必要があるかどうかを確認し、基になる IRelationalDatabaseCreator サービスを使用してスキーマを初期化できます。
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();
.NET