エンティティフレームワーク-移行

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

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

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

アプリケーションがEF4.1以降で出荷されたDbContextを使用している場合、移行プロセスは簡単です。ただし、アプリケーションがObjectContextの場合は、もう少し作業が必要です。

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

Step 1 −最初のステップは、.NET Framework 4.5.2をターゲットにし、後でプロジェクトを右クリックしてプロパティを選択することです。

Step 2 −プロジェクトをもう一度右クリックし、[NuGetパッケージの管理...]を選択します。

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

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

Step 4 − EF Designerで作成されたモデルがある場合は、コード生成テンプレートを更新して、EF6互換コードを生成する必要もあります。

Step 5 −ソリューションエクスプローラーのedmxファイルで、通常は<edmx_file_name> .ttおよび<edmx_file_name> .Context.ttという名前の既存のコード生成テンプレートを削除します。

Step 6 − EFデザイナでモデルを開き、デザインサーフェスを右クリックして、[コード生成アイテムの追加...]を選択します。

Step 7 −適切なEF6.xコード生成テンプレートを追加します。

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

アプリケーションがEF4.1以降を使用している場合、DbContextタイプとCode Firstタイプの名前空間は変更されていないため、コード内で何も変更する必要はありません。

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

Step 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ベースのアプリケーションで直接使用されないため、コア名前空間に含まれています。

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

既存のEntityFrameworkプロジェクトは、大きな変更を加えることなくEntity Framework6.0で機能します。