web-dev-qa-db-ja.com

Entity Framework 5から6へのアップグレード

Entity Framework 5を使用してからEntity Framework 6にプロジェクトをアップグレードした後(NuGets更新機能)、生成されたエンティティクラスで次のエラーが発生します。

エラー1タイプまたは名前空間名「オブジェクト」は名前空間「System.Data」に存在しません
(アセンブリ参照が欠落していますか?)

これは、名前空間が変更されたためであり、インポートを次の場所から変更することで、手動でエラーを修正できることを理解しています:using System.Data.Objects;およびusing System.Data.Objects.DataClasses;宛先:using System.Data.Entity.Core.Objects;

ただし、ファイルは生成されるため、Update model from Database。 EFにこのエラーなしでモデルを生成させるために変更する特別なものはありますか?.

40
RossBille

問題は、エンティティとコンテキストを生成するT4テンプレートがEFバージョン5に残っていることだと思います。

まず、モデルのコードビハインドにある現在のコード生成項目、つまり<Modelname>.Context.tt<Modelname>.ttを削除する必要があります。次に、Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generatorで新しいEFバージョン6コードジェネレーターを追加します。

62
boindiil

これは、Entity Framework v5をv6に正常にアップグレードする方法に関する私の経験です:

  • SQLサーバー。
  • C#およびVisual Studio 2012。
  • 最初にデータベース。

頭字語:

  • EF5 = Entity Framework v5。
  • EF6 = Entity Framework v6。

チェックリスト:

  1. EF5は.NET 4.5のコアに組み込まれていますが、EF6はシフトアウトされており、オープンソースです。
    • つまり、新しいEF6アセンブリをソリューションのすべての関連プロジェクト、特にエントリプロジェクトに追加する必要があります。
    • つまり、EF5を参照しているため、すべてのプロジェクトからAssembly System.Entityを削除する必要があります。
  2. EF5には単一の.dll "EntityFramework.dll"がありますが、EF6には2つの.dllがあります。
    • EntityFramework
    • EntityFramework.SqlServer
  3. EF6ではapp.configを変更する必要があります。これらの変更を行う最良の方法は、ソリューションを右クリックし、「ソリューションのNuGetパッケージの管理」を選択し、「EntityFramework」を検索して、Entity Frameworkのv6.1.0をすべての関連プロジェクト、特にエントリープロジェクトにインストールすることです。すべてのプロジェクトからEF5フレームワークのNuGetパッケージを必ずアンインストールしてください。これにより、app.configファイルが自動的に更新され、正しいものになります。
  4. すべてのapp.configファイルでEF5への参照を調べ、それらを削除します。
  5. 名前空間が変更されました:
    • C#行を削除using System.Data.EntityClient;、これはEF5参照です。
    • C#行を追加using System.Data.Entity.Core.EntityClient;これはEF6に適しています。

まだ立ち往生?このチェックリストはコミュニティWikiです。このチェックリストを自由に編集して、EF6構成のレンガの壁に頭をぶつけている不​​幸な魂を助けてください。

更新2016-02-15

EFを検討する前に、他のオプションを検討してください。他のオプションよりも100倍遅く、提供するものが非常に複雑であり、エンティティGUIにはバグがいっぱいで、使い勝手に問題があります。EF6コードをすべてリッピングして、それを必要なものに置き換える必要があります。 Dapperで5秒かかるクエリを作成するのに5分未満。

37
Contango