Entity Framework 6 へのアップグレードUpgrading to Entity Framework 6

以前のバージョンの EF では、コードは、NuGet パッケージに付属している .NET Framework および帯域外 (主に EntityFramework.dll) ライブラリの一部として出荷されたコアライブラリ (主に System.Data.Entity.dll) と分けていました。In previous versions of EF the code was split between core libraries (primarily System.Data.Entity.dll) shipped as part of the .NET Framework and out-of-band (OOB) libraries (primarily EntityFramework.dll) shipped in a NuGet package. EF6 はコアライブラリからコードを取得し、OOB ライブラリに組み込みます。EF6 takes the code from the core libraries and incorporates it into the OOB libraries. これは、EF をオープンソースにして、.NET Framework とは異なるペースで進化できるようにするために必要でした。This was necessary in order to allow EF to be made open source and for it to be able to evolve at a different pace from .NET Framework. その結果、移動された型に対してアプリケーションを再構築する必要があります。The consequence of this is that applications will need to be rebuilt against the moved types.

これは、EF 4.1 以降に付属している DbContext を使用するアプリケーションでは簡単です。This should be straightforward for applications that make use of DbContext as shipped in EF 4.1 and later. ObjectContext を使用するアプリケーションには、もう少し作業が必要ですが、それでも難しいことはありません。A little more work is required for applications that make use of ObjectContext but it still isn’t hard to do.

既存のアプリケーションを EF6 にアップグレードするために必要な作業のチェックリストを次に示します。Here is a checklist of the things you need to do to upgrade an existing application to EF6.

1. EF6 NuGet パッケージをインストールする1. Install the EF6 NuGet package

新しい Entity Framework 6 ランタイムにアップグレードする必要があります。You need to upgrade to the new Entity Framework 6 runtime.

  1. プロジェクトを右クリックし、[ NuGet パッケージの管理... ] を選択します。Right-click on your project and select Manage NuGet Packages...
  2. [オンライン] タブで [ entityframework ] を選択し、[インストール] をクリックします。Under the Online tab select EntityFramework and click Install


    以前のバージョンの EntityFramework NuGet パッケージがインストールされている場合は、EF6 にアップグレードされます。If a previous version of the EntityFramework NuGet package was installed this will upgrade it to EF6.

または、パッケージマネージャーコンソールから次のコマンドを実行します。Alternatively, you can run the following command from Package Manager Console:

Install-Package EntityFramework

2. System.Data.Entity.dll へのアセンブリ参照が削除されていることを確認します。2. Ensure that assembly references to System.Data.Entity.dll are removed

EF6 NuGet パッケージをインストールすると、プロジェクトからへの参照が自動的に削除されます。Installing the EF6 NuGet package should automatically remove any references to System.Data.Entity from your project for you.

3. ef Designer (EDMX) モデルをスワップして EF 6.x コード生成を使用する3. Swap any EF Designer (EDMX) models to use EF 6.x code generation

EF デザイナーで作成されたモデルがある場合は、コード生成テンプレートを更新して、EF6 互換コードを生成する必要があります。If you have any models created with the EF Designer, you will need to update the code generation templates to generate EF6 compatible code.


現在、Visual Studio 2012 および2013で使用できる EF 6.x DbContext ジェネレーターテンプレートのみがあります。There are currently only EF 6.x DbContext Generator templates available for Visual Studio 2012 and 2013.

  1. 既存のコード生成テンプレートを削除します。Delete existing code-generation templates. これらのファイルは、通常は** <edmx_file_name> .ttとという名前になります。 <edmx_file_name>Context.tt**は、ソリューションエクスプローラーの edmx ファイルの下に入れ子になっています。These files will typically be named <edmx_file_name>.tt and <edmx_file_name>.Context.tt and be nested under your edmx file in Solution Explorer. ソリューションエクスプローラーでテンプレートを選択し、 del キーを押して削除することができます。You can select the templates in Solution Explorer and press the Del key to delete them.


    Web サイトプロジェクトでは、テンプレートは edmx ファイルの下に入れ子になっていませんが、ソリューションエクスプローラーに並べられています。In Web Site projects the templates will not be nested under your edmx file, but listed alongside it in Solution Explorer.


    VB.NET プロジェクトでは、[すべてのファイルを表示] を有効にして、入れ子になったテンプレートファイルを表示できるようにする必要があります。In VB.NET projects you will need to enable 'Show All Files' to be able to see the nested template files.

  2. 適切な EF 6.x コード生成テンプレートを追加します。Add the appropriate EF 6.x code generation template. EF デザイナーでモデルを開き、デザイン画面を右クリックして、[コード生成項目の追加... ] を選択します。Open your model in the EF Designer, right-click on the design surface and select Add Code Generation Item...

    • DbContext API (推奨) を使用している場合は、[データ] タブでEF 6.X の dbcontext ジェネレーターを使用できます。If you are using the DbContext API (recommended) then EF 6.x DbContext Generator will be available under the Data tab.


      Visual Studio 2012 を使用している場合は、このテンプレートを使用するために EF 6 ツールをインストールする必要があります。If you are using Visual Studio 2012, you will need to install the EF 6 Tools to have this template. 詳細については、「 Get Entity Framework 」を参照してください。See Get Entity Framework for details.

    • ObjectContext API を使用している場合は、[ オンライン ] タブを選択し、 EF 6.X の entityobject Generatorを検索する必要があります。If you are using the ObjectContext API then you will need to select the Online tab and search for EF 6.x EntityObject Generator.

  3. コード生成テンプレートにカスタマイズを適用した場合は、更新されたテンプレートに再適用する必要があります。If you applied any customizations to the code generation templates you will need to re-apply them to the updated templates.

4. 使用されているすべてのコア EF 型の名前空間を更新する4. Update namespaces for any core EF types being used

DbContext および Code First 型の名前空間は変更されていません。The namespaces for DbContext and Code First types have not changed. これは、EF 4.1 以降を使用する多くのアプリケーションでは、何も変更する必要がないことを意味します。This means for many applications that use EF 4.1 or later you will not need to change anything.

以前は System.Data.Entity.dll であった ObjectContext のような型は、新しい名前空間に移動されました。Types like ObjectContext that were previously in System.Data.Entity.dll have been moved to new namespaces. つまり、EF6 に対してビルドするには、 using ディレクティブまたは Import ディレクティブを更新する必要があります。This means you may need to update your using or Import directives to build against EF6.

名前空間の変更に関する一般的な規則は、system.string 内のすべての型が、system.string に移動されることです。The general rule for namespace changes is that any type in System.Data.* is moved to System.Data.Entity.Core.*. 言い換えると、" Entity. Core " を挿入するだけです。In other words, just insert Entity.Core. System. Data の後。after System.Data. 次に例を示します。For example:

  • System.string. EntityException => system.string。Entity. Core。EntityExceptionSystem.Data.EntityException => System.Data.Entity.Core.EntityException
  • System.string は、system.string を> します。Entity. Core。オブジェクト。 ObjectContextSystem.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext
  • RelationshipManager => system.string のデータを持つことができます。Entity. Core。オブジェクト. RelationshipManagerSystem.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core.Objects.DataClasses.RelationshipManager

これらの型は、ほとんどの DbContext ベースのアプリケーションでは直接使用されないため、 コア 名前空間にあります。These types are in the Core namespaces because they are not used directly for most DbContext-based applications. System.Data.Entity.dll の一部であった一部の型は、DbContext ベースのアプリケーションに対してよく使用され、直接使用されるため、 コア 名前空間に移動されていません。Some types that were part of System.Data.Entity.dll are still used commonly and directly for DbContext-based applications and so have not been moved into the Core namespaces. 次のとおりです。These are:

  • EntityState => system.string をします。エンティティ。EntityStateSystem.Data.EntityState => System.Data.Entity.EntityState
  • System.string. EdmFunctionAttribute => system.string......Entity. DbFunctionAttributeSystem.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute


    このクラスは名前が変更されました。古い名前のクラスは引き続き存在し、動作しますが、現在は不使用とマークされています。This class has been renamed; a class with the old name still exists and works, but it now marked as obsolete.

  • System.string. EntityFunctions => system.string です。Entity DbFunctionsSystem.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions


    このクラスは名前が変更されました。古い名前のクラスは引き続き存在し、動作しますが、現在は不使用とマークされています)。This class has been renamed; a class with the old name still exists and works, but it now marked as obsolete.)

  • 空間クラス (例: DbGeography, Dbgeography) は、system.string> から移動しています。エンティティ。許容Spatial classes (for example, DbGeography, DbGeometry) have moved from System.Data.Spatial => System.Data.Entity.Spatial


System.string 名前空間の一部の型は、EF アセンブリではない System.Data.dll にあります。Some types in the System.Data namespace are in System.Data.dll which is not an EF assembly. これらの型は移動されていないため、名前空間は変更されません。These types have not moved and so their namespaces remain unchanged.