Create API と Drop API

EnsureCreated() および EnsureDeleted() メソッドは、データベース スキーマを管理するための、Migrations に代わる軽量の方法です。 これらのメソッドが役立つのは、データが一時的であり、スキーマの変更時に削除できるシナリオの場合です。 たとえば、プロトタイプの作成中、テスト時、ローカル キャッシュの場合などです。

一部のプロバイダー (特に非リレーショナルプロバイダー) では、Migrations はサポートされません。 これらのプロバイダーでは、多くの場合、EnsureCreated がデータベース スキーマを初期化する最も簡単な方法です。

警告

EnsureCreated と Migrations は一緒に使用するとうまく機能しません。 Migrations を使用している場合は、スキーマの初期化に EnsureCreated を使用しないでください。

EnsureCreated から Migrations への切り替えはシームレスには行われません。 これを行う最も簡単な方法は、データベースを削除し、Migrations を使用して再作成することです。 今後移行を使用する予定がある場合は、EnsureCreated を使用するのではなく、Migrations から始めるのが最善です。

EnsureDeleted

EnsureDeleted メソッドを使用すると、データベースが存在する場合にそのデータベースが削除されます。 適切なアクセス許可がない場合は、例外がスローされます。

// Drop the database if it exists
dbContext.Database.EnsureDeleted();

EnsureCreated

EnsureCreated を使用すると、データベースが存在しない場合にデータベースが作成され、データベース スキーマが初期化されます。 テーブル (別の DbContext クラスのテーブルを含む) が存在する場合、スキーマは初期化されません。

// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();

ヒント

これらのメソッドの非同期バージョンも用意されています。

SQL スクリプト

EnsureCreated によって使用される 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();