Entity-framework-migration

提供:Dev Guides
移動先:案内検索

Entity Framework-移行

Entity Framework 5および以前のバージョンのEntity Frameworkでは、コードは.NET Frameworkの一部として出荷されるコアライブラリ(主にSystem.Data.Entity.dll)に分割され、追加のライブラリ(主にEntityFramework.dll)が配布され、次の図に示すように、NuGetを使用して出荷されます。

DotNet Framework

Entity Framework 6では、以前は.NETフレームワークの一部であったコアAPIもNuGetパッケージの一部として出荷および配布されます。

コアAPI

これは、Entity Frameworkをオープンソースにするために必要でした。 ただし、結果として、アプリケーションを古いバージョンのEntity FrameworkからEF 6に移行またはアップグレードする必要がある場合は常に、アプリケーションを再構築する必要があります。

アプリケーションがEF 4.1以降で出荷されたDbContextを使用している場合、移行プロセスは簡単です。 ただし、アプリケーションがObjectContextである場合、それ以上の作業は必要ありません。

既存のアプリケーションをEF6にアップグレードするために必要な次の手順を見てみましょう。

  • ステップ1 *-最初のステップは、.NET Framework 4.5.2以降を対象とし、プロジェクトを右クリックしてプロパティを選択することです。

EF6のアップグレード

  • ステップ2 *-プロジェクトをもう一度右クリックして、[NuGetパッケージの管理…​]を選択します。

NuGetパッケージの管理

  • ステップ3 *-[オンライン]タブで[EntityFramework]を選択し、[インストール]をクリックします。 System.Data.Entity.dllへのアセンブリ参照が削除されていることを確認してください。

EF6 NuGetパッケージをインストールすると、プロジェクトからSystem.Data.Entityへの参照が自動的に削除されます。

  • ステップ4 *-EF Designerで作成されたモデルがある場合は、コード生成テンプレートを更新してEF6互換コードを生成する必要もあります。
  • ステップ5 *-ソリューションエクスプローラーのedmxファイルで、通常<edmx_file_name> .ttおよび<edmx_file_name> .Context.ttという名前の既存のコード生成テンプレートを削除します。

Edmx

  • ステップ6 *-EF Designerでモデルを開き、デザイン画面を右クリックして、[コード生成アイテムの追加…​]を選択します。
  • ステップ7 *-適切なEF 6.xコード生成テンプレートを追加します。

コード生成テンプレート

また、EF6互換コードを自動的に生成します。

アプリケーションがEF 4.1以降を使用している場合、DbContextおよびCode Firstタイプのネームスペースは変更されていないため、コードを変更する必要はありません。

ただし、アプリケーションが以前のバージョンのEntity Frameworkを使用している場合、以前System.Data.Entity.dllにあったObjectContextのような型は新しい名前空間に移動されました。

  • ステップ8 *-EF6に対してビルドするには、usingまたはImportディレクティブを更新する必要があります。

名前空間の変更に関する一般的な規則は、System.Data。*のすべての型がSystem.Data.Entity.Core。*に移動されることです。 以下はそれらのいくつかです-

*System.Data.EntityException⇒System.Data* *。Entity.Core。** EntityException
*System.Data.Objects.ObjectContext⇒System.Data* *。Entity.Core。** Objects.ObjectContext;
*System.Data.Objects.DataClasses.RelationshipManager⇒System.Data* *。Entity.Core。** Objects.DataClasses.RelationshipManager;

一部のタイプは、ほとんどのDbContextベースのアプリケーションで直接使用されないため、_Core_名前空間にあります。

  • System.Data.EntityState⇒System.Data.Entity.EntityState
  • System.Data.Objects.DataClasses.EdmFunctionAttribute⇒System.Data.Entity.DbFunctionAttribute

既存のEntity Frameworkプロジェクトは、大きな変更なしでEntity Framework 6.0で機能します。