最初の Entity Framework 5 モデルでは、クラス ファイルの生成方法が原因でいくつかの重大な変更があるようです (コード生成はなくなりますが、T4 テンプレート)。
2 つの例:
- 生成されたコンテキスト ファイルは IDisposable を実装しなくなりました
- もう接続文字列を取るコンストラクターはありません
さらに破壊的な変更はありますか? そして、それらへの解決策は何ですか?
最初の Entity Framework 5 モデルでは、クラス ファイルの生成方法が原因でいくつかの重大な変更があるようです (コード生成はなくなりますが、T4 テンプレート)。
2 つの例:
さらに破壊的な変更はありますか? そして、それらへの解決策は何ですか?
Entity Framework 5 のモデルから生成された既定のコードは、ObjectContext ではなく DbContext を継承するようになりました。
これは引き続き IDisposable を実装しますが、次のようなコード行からエラーが発生する場合:
using (var mymodel = new MyModelContext()) { ... }
... IDisposable を実装していないことについて不平を言う場合、問題は、モデルが EF5 を参照する別のアセンブリで定義されており、プロジェクトに EF5 参照を追加していない可能性が高いです。
Ladislav Mrnka が彼の回答で既に述べたように、接続文字列をコンストラクターに渡したい場合は、独自のコンストラクターを手動で作成してこれを行う必要があります。
Entity Framework を、探しているコンストラクターを自動的に生成する古いスタイルの生成コードに戻す場合は、次の手順に従います。
生成されたコンテキスト ファイルは IDisposable を実装しなくなりました
IDisposable
親コンテキスト タイプによって引き続き実装されます。生成された型はまだ使い捨てです。
もう接続文字列を取るコンストラクターはありません
規則を使用して接続文字列を取得するようになりましたが、独自のコンストラクターをテンプレートまたはコンテキストの部分クラス部分に追加できます。
さらに破壊的な変更はありますか? そして、それらへの解決策は何ですか?
ObjectContext API の代わりに DbContext API を使用するため、完全に重大な変更です。これは、異なるタイプ、異なるメソッド、POCO エンティティなどを意味します。元のコード生成に戻したい場合は、それらの T4 テンプレートを削除してコード生成を有効にする必要があります。 .Designer.cs ファイルで説明されているとおりですが、現在推奨される方法は、POCO と DbContext API を使用することです。
IDisposable を拡張した型を必要とする using ステートメントで同じ問題が発生していました...プロジェクトで System.Data.Entity を参照するのを忘れていたことが判明しました...参照を追加し、問題を修正しました。