私はEntityFramework4.0を初めて使用し、C#で使用しており、現在その機能を試しています。
私が気付いたのは、ほとんどの同様のORMと同様に、生成されたエンティティで行われるデータ操作とCRUDステートメントの生成を処理するためにContextオブジェクトに依存していることです。
つまり、変更をデータベースに保存し直す場合は、エンティティをインスタンス化したObjectContextへの参照に常にアクセスできる必要があります。
アクセス可能なスコープ(たとえば、同じメソッド)でコンテキストが作成されている場合は問題ありませんが、エンティティまたはエンティティセットをメソッドに渡し、このメソッドに変更を保存させたい場合はどうなりますか?ObjectContextをパラメーターと一緒に渡すのが唯一の簡単な方法のようです。
別の解決策は、ObjectContextをある種のグローバル変数に配置することです。言うまでもなく、これらのアプローチの両方にスタイリングと保守性の問題があります。
要するに、私が想像できる最善の方法は、エンティティまたはエンティティセットからObjectContextへの参照を取得することです。デフォルトでは不可能であることを私は知っています。
エンティティからObjectContextを取得するための拡張メソッドの追加を示すメソッドを見つけました。ただし、関係のあるエンティティに対してのみ機能し、作成者によると、このメソッドの呼び出しにはコストがかかります。
T4テンプレートを変更して、すべてのエンティティにContextプロパティを追加し、エンティティのインスタンス化時に自動的に入力することを考えていました。
Entity Frameworkが生成されたクラスに最大長を適用するようにT4テンプレートを一度変更しました(JulieLermanのProgrammingEntity Framework 4の本に従ってください)。これまでのところ、T4構文を本当に楽しんでいるとは言えませんが、それが最善/唯一の方法である場合は、そうしてください...
誰かがすでにそうしましたか?これを処理し、彼のT4テンプレートを共有したり、これを行うためにフックするのに最適な部分的なメソッドやイベントを説明したりするための最良の方法は何でしょうか?
そのようなアプローチを使用することに大きな欠点はありますか?ObjectContextへの参照が非常に多いと、エンティティの一部がスコープ内に残っている場合、GCによる再収集の機能が妨げられたり遅れたりする可能性があると思いますが、実際にはObjectContextを使用できなくなりました。
どうもありがとう。