13

最初の Entity Framework 5 モデルでは、クラス ファイルの生成方法が原因でいくつかの重大な変更があるようです (コード生成はなくなりますが、T4 テンプレート)。

2 つの例:

  • 生成されたコンテキスト ファイルは IDisposable を実装しなくなりました
  • もう接続文字列を取るコンストラクターはありません

さらに破壊的な変更はありますか? そして、それらへの解決策は何ですか?

4

3 に答える 3

34

Entity Framework 5 のモデルから生成された既定のコードは、ObjectContext ではなく DbContext を継承するようになりました。

これは引き続き IDisposable を実装しますが、次のようなコード行からエラーが発生する場合:

using (var mymodel = new MyModelContext()) { ... }

... IDisposable を実装していないことについて不平を言う場合、問題は、モデルが EF5 を参照する別のアセンブリで定義されており、プロジェクトに EF5 参照を追加していない可能性が高いです。

Ladislav Mrnka が彼の回答で既に述べたように、接続文字列をコンストラクターに渡したい場合は、独自のコンストラクターを手動で作成してこれを行う必要があります。

Entity Framework を、探しているコンストラクターを自動的に生成する古いスタイルの生成コードに戻す場合は、次の手順に従います。

  1. EDMX ファイルのデザイナー画面をクリックし、プロパティ ウィンドウを確認します。「コード生成戦略」というプロパティを見つけて、これを「なし」ではなく「デフォルト」に設定します。これにより、Visual Studio は MyModel.Designer.cs 内のオブジェクト モデルのコードの作成を 1 つの大きなファイルで開始するように指示されます。今回は、DbContext ではなく ObjectContext を使用します。
  2. EDMX ファイルの下から次のサブファイルを削除します: MyModel.Context.tt、MyModel.tt。これらは、不要になった自動生成ファイルです。それらを削除しないと、オブジェクトが 2 回作成されるため、クラス名の競合が発生します。
于 2012-09-24T16:09:35.403 に答える
5

生成されたコンテキスト ファイルは IDisposable を実装しなくなりました

IDisposable親コンテキスト タイプによって引き続き実装されます。生成された型はまだ使い捨てです。

もう接続文字列を取るコンストラクターはありません

規則を使用して接続文字列を取得するようになりましたが、独自のコンストラクターをテンプレートまたはコンテキストの部分クラス部分に追加できます。

さらに破壊的な変更はありますか? そして、それらへの解決策は何ですか?

ObjectContext API の代わりに DbContext API を使用するため、完全に重大な変更です。これは、異なるタイプ、異なるメソッド、POCO エンティティなどを意味します。元のコード生成に戻したい場合は、それらの T4 テンプレートを削除してコード生成を有効にする必要があります。 .Designer.cs ファイルで説明されているとおりですが、現在推奨される方法は、POCO と DbContext API を使用することです。

于 2012-09-20T08:02:17.513 に答える
1

IDisposable を拡張した型を必要とする using ステートメントで同じ問題が発生していました...プロジェクトで System.Data.Entity を参照するのを忘れていたことが判明しました...参照を追加し、問題を修正しました。

于 2015-04-07T01:19:27.333 に答える