次の方法で共有


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