API の作成と削除

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();