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