作成し、Drop ApiCreate and Drop APIs

EnsureCreated と EnsureDeleted メソッドに軽量な代替手段を提供移行データベース スキーマを管理するためです。The EnsureCreated and EnsureDeleted methods provide a lightweight alternative to Migrations for managing the database schema. これらのメソッドは、データが一時的であり、スキーマが変更されたときに削除することができる場合のシナリオで便利です。These methods are useful in scenarios when the data is transient and can be dropped when the schema changes. プロトタイプ作成、テストでは、またはのローカル キャッシュたとえば中です。For example during prototyping, in tests, or for local caches.

一部のプロバイダー (特に非リレーショナル) は、移行でサポートされていません。Some providers (especially non-relational ones) don't support Migrations. これらのプロバイダーで EnsureCreated は多くの場合、値が、データベース スキーマを初期化するために最も簡単な方法です。For these providers, EnsureCreated is often the easiest way to initialize the database schema.

警告

EnsureCreated と移行は、うまく連携機能しません。EnsureCreated and Migrations don't work well together. 移行を使用している場合は、スキーマを初期化するために EnsureCreated を使用しないでください。If you're using Migrations, don't use EnsureCreated to initialize the schema.

EnsureCreated からの移行への移行は、シームレスなエクスペリエンスではありません。Transitioning from EnsureCreated to Migrations is not a seamless experience. これを行う最も簡単な方法では、データベースを削除し、Migrations を使用して再作成します。The simplest way to do it is to drop the database and re-create it using Migrations. Migrations を使用して、将来を予測する場合は、EnsureCreated を使用する代わりに移行から始めることをお勧めします。If you anticipate using migrations in the future, it's best to just start with Migrations instead of using EnsureCreated.

EnsureDeletedEnsureDeleted

存在する場合、EnsureDeleted メソッドは、データベースを削除します。The EnsureDeleted method will drop the database if it exists. 適切なアクセス許可を持っていない場合は、例外がスローされます。If you don't have the appropriate permissions, an exception is thrown.

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

EnsureCreatedEnsureCreated

存在しないし、データベース スキーマを初期化する場合、EnsureCreated は、データベースを作成します。EnsureCreated will create the database if it doesn't exist and initialize the database schema. 任意のテーブルが存在しない場合 (他の DbContext クラスでテーブルを含む)、スキーマはを初期化しません。If any tables exist (including tables for another DbContext class), the schema won't be initialized.

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

ヒント

これらのメソッドの非同期バージョンも使用できます。Async versions of these methods are also available.

SQL スクリプトSQL Script

EnsureCreated で使用される SQL を取得するには、GenerateCreateScript メソッドを使用できます。To get the SQL used by EnsureCreated, you can use the GenerateCreateScript method.

var sql = dbContext.Database.GenerateCreateScript();

複数の DbContext クラスMultiple DbContext classes

EnsureCreated では、テーブルがデータベースに存在しない場合にのみ機能します。EnsureCreated only works when no tables are present in the database. 必要に応じて、して初期化するのには、スキーマが必要なかどうかは、独自のチェックを記述し、基になる IRelationalDatabaseCreator サービスを使用してスキーマを初期化します。If needed, you can write your own check to see if the schema needs to be initialized, and use the underlying IRelationalDatabaseCreator service to initialize the schema.

// TODO: Check whether the schema needs to be initialized

// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();