Entity Framework Core Seriesチュートリアル-26-データ移行

Entity Framework Coreデータの移行

移行は、データを保持することにより、データベースアーキテクチャをEF Coreモデルと同期させる方法です。
[外部チェーンイメージの転送に失敗しました。ソースサイトに盗難防止チェーンメカ​​ニズムがある可能性があります。イメージを保存して直接アップロードすることをお勧めします(img-K5pXisZH-1581165405062)(d:\ note \ efcore \ pic \ 28.png)]
上の図に示すように、EF Core APIはドメイン(エンティティ)クラスからEF Coreモデルを構築し、EF Coreの移行はEF Coreモデルに基づいてデータベーススキーマを作成または更新します。ドメインクラスを変更するたびに、データベーススキーマを最新に保つために移行を実行する必要があります。
EF Coreの移行は、NuGetパッケージマネージャーコンソールまたはdotnetコマンドラインインターフェイス(CLI)で実行できる一連のコマンドです。
次の表に、EF Coreの重要な移行コマンドを示します。

パッケージマネージャーのコンソールコマンド dotnetコマンドラインコマンド 使い方
add-migration <移行名> <移行名>を追加 移行スナップショットを追加して移行を作成する
移行の削除 削除する 最後の移行スナップショットを削除する
データベースを更新する 更新 最後の移行スナップショットに基づいてデータベーススキーマを更新する
スクリプトの移行 脚本 すべての移行スナップショットを使用してSQLスクリプトを生成する

移行を追加

初めて、初期ドメインクラスを定義しました。この時点で、アプリケーションには、ドメインクラスにデータを格納するためのデータベースがありません。したがって、最初にマイグレーションを作成する必要があります。

Visual Studioで、ツール-> NuGetパッケージマネージャー->パッケージマネージャーコンソールからパッケージマネージャーコンソールを開き、次のコマンドを実行して移行を追加します。

add-migration MyFirstMigration

dotnetコマンドラインインターフェースを使用している場合は、以下のコマンドを実行してください。

dotnet ef migrations add MyFirstMigration

上記のコマンドで、MyFirstMigrationは移行の名前です。これにより、以下に示すように、プロジェクトの「Migration」フォルダーに3つのファイルが作成されます。
ここに画像の説明を挿入

  1. <timestamp> _ <移行名> .cs:メインの移行ファイル。Up()およびDown()メソッドでの移行操作が含まれます。Up()メソッドにはデータベースオブジェクトを作成するためのコードが含まれ、Down()メソッドにはデータベースオブジェクトを削除するためのコードが含まれます。
  2. <Timestamp> _ <移行名> .Designer.cs:EF Coreが使用する情報を含む移行メタデータファイル。
  3. <contextclassname> ModelSnapshot.cs:現在のモデルのスナップショット。これは、次のマイグレーションの作成時に行われた変更を判別するために使用されます。
    ここで、移行スナップショットを作成した後、データベースを作成します。

データベースを作成または更新する

次のコマンドを使用して、データベーススキーマを作成または更新します。

  1. パッケージマネージャーコンソール
Update-Database
  1. dotnetコマンドライン
dotnet ef database update

Updateコマンドは、コンテキストとドメインクラスおよび移行スナップショットに基づいてデータベースを作成します。これらのスナップショットは、add-migrationまたはaddコマンドを使用して作成されます。
これが最初の移行である場合、__ EFMigrationsHistoryという名前のテーブルも作成されます。このテーブルには、すべての移行の名前と、それらがデータベースにいつ適用されるかが格納されます。
ここに画像の説明を挿入

移行を削除

最後の移行がデータベースに適用されなかった場合は、それを削除できます。次の削除コマンドを使用して、最後に作成された移行ファイルを削除し、モデルのスナップショットを復元します。

  1. パッケージマネージャーコンソール
remove-migration
  1. dotnetコマンドライン
dotnet ef migrations remove

上記のコマンドは、最後の移行を削除し、モデルのスナップショットを以前の移行に復元します。移行がデータベースに適用されている場合、次の例外がスローされることに注意してください。
移行<移行名>がデータベースに適用されました。復元してもう一度お試しください。移行が他のデータベースに適用されている場合は、新しい移行を使用して変更を元に戻すことを検討してください。

移行を復元

ドメインクラスを変更し、add-migrationコマンドを使用してMySecondMigrationという名前の2番目の移行を作成し、Updateコマンドを使用して移行をデータベースに適用するとします。ただし、何らかの理由で、データベースを以前の状態に復元する必要があります。この場合、update-database <migration name>コマンドを使用して、指定した以前の移行スナップショットにデータベースを復元します。

  1. パッケージマネージャーコンソール
Update-database MyFirstMigration
  1. dotnetコマンドライン
dotnet ef database update MyFirstMigration

上記のコマンドは、MyFirstMigrationという名前の移行に基づいてデータベースを復元し、MySecondMigrationという名前の2番目の移行に適用されたすべての変更を削除します。これにより、データベースの__EFMigrationsHistoryテーブルからMySecondMigrationエントリも削除されます。

注:これにより、MySecondMigrationに関連する移行ファイルは削除されません。プロジェクトから削除するには、removeコマンドを使用します。

SQLスクリプトを生成する

次のコマンドを使用して、データベースのSQLスクリプトを生成します。

  1. パッケージマネージャーコンソール
script-migration
  1. dotnetコマンドライン
dotnet ef migrations script

上記のスクリプトコマンドには、デフォルトで移行されたすべてのスクリプトが含まれます。-toおよび-fromオプションを使用して、移行スコープを指定できます。

パッケージマネージャコンソールコマンドから

Visual Studioのパッケージマネージャーコンソールを使用して、Entity Framework Coreで移行コマンドを実行できます。Visual Studioの[ツール]-> [NuGetパッケージマネージャー]-> [パッケージマネージャーコンソール]からパッケージマネージャーコンソールを開き、次のコマンドを実行します。

パッケージマネージャーコンソール 使い方
Get-Helpエンティティフレームワーク Entity Frameworkコマンドに関する情報を表示するためのヘルプentityframeworkを取得する
追加移行 <移行名>移行スナップショットを追加して移行を作成します
移行の削除 最後の移行スナップショットを削除する
データベースを更新する 最後の移行スナップショットに基づいてデータベーススキーマを更新する
スクリプトの移行 すべての移行スナップショットを使用してSQLスクリプトを生成する
Scaffold-DbContext 指定されたデータベースのDbContextおよびエンティティタイプクラスを生成します。これはリバースエンジニアリングと呼ばれています
Get-DbContext DbContextタイプに関する情報を取得する
ドロップデータベース データベースを削除する

Get-Help

get-help entityframework

Add-Migration Add migration

get-help entityframework

移行の削除

get-help entityframework

データベースの更新

get-help entityframework

スクリプトの移行スクリプトの移行

get-help entityframework

scaffold-dbcontext scaffoldデータベースコンテキスト

get-help entityframework

Get-DbContext

get-help entityframework

ドロップデータベース

get-help entityframework

移行用のコマンドラインインターフェイスコマンド

.NET Core Command List Interfaceを使用して、Entity Frameworkコアコマンドを実行します。.NET CLIを使用するには、.NET Coreプロジェクトの.csprojファイルを編集して、<ItemGroup>ノードの下に<DotNetCliToolReference Include = "Microsoft.EntityFrameworkCore.Tools.DotNet" Version = "2.0.0" />を追加します。
コマンドプロンプトを開き、プロジェクトのルートフォルダーに移動し、dotnet ef --helpと入力して、以下に示すようにEF Coreコマンドを一覧表示します。
[外部チェーンイメージの転送に失敗しました。ソースサイトに盗難防止チェーンメカ​​ニズムがある可能性があります。イメージを保存して直接アップロードすることをお勧めします(img-cD0PztSl-1581165405066)(d:\ note \ efcore \ pic \ 31.png)]

上記のように、データベース、dbcontext、および移行の3つの主要なEFコマンドを使用できます。次の表に、すべてのEFコマンドとサブコマンドを示します。

コマンド サブコマンド 使い方
データベース 落とす データベースを削除する
更新 データベースを指定された移行に更新します
DbContext 情報 DbContextタイプに関する情報を取得する
リスト 利用可能なDbContextタイプをリストする
足場 データベースのDbContextとエンティティタイプを提供する
マイグレーション 追加 新しい移行を追加
リスト 利用可能な移行を一覧表示する
削除する 最後の移行を削除
脚本: 移行からSQLスクリプトを生成する

各コマンドで使用できるオプションを見てみましょう。

データベースのドロップ

dotnet ef database drop

データベースの更新

dotnet ef database update

DbContext情報

dotnet ef dbcontext info

DbContextリスト

dotnet ef dbcontext list

DbContext足場

dotnet ef dbcontext scaffold

追加

dotnet ef migrations add

リスト

dotnet ef migrations list

削除する

dotnet ef migrations remove

脚本

dotnet ef migrations script
177件の元の記事を公開しました 61件の賞賛 170,000回の閲覧

おすすめ

転載: blog.csdn.net/xingkongtianyuzhao/article/details/104228019