5

DataLoadOptionsLINQ to SQL の LINQ to Entities に存在するクラスのバージョンはありますか? 基本的に、熱心な読み込み構成のすべてを格納する 1 つの場所が必要であり、.Include()すべての LINQ to Entities クエリへの呼び出しを追加する必要はありません。または、誰かがより良い解決策を持っている場合は、それにも確実に対応できます。

ティア、
ベンジー

4

2 に答える 2

5

個人的には、に相当する(公式の)EFがないことをうれしく思いDataLoadOptionsます。なんで?いくつかの理由:

  • 例外がスローされるように使用するのは簡単すぎます。MSDNページの備考セクションを参照してください。
  • フィルタリングされた子コレクションの概念は好きではありません。がの場合、メンバーにその顧客注文を表現しCustomerOrdersもらいたい(怠惰かどうか)。他の場所(によって)で定義されたフィルターは簡単に忘れられます。必要なときに必要な場所でフィルタリングします。これは最後の異議につながります:OrdersAssociateWith
  • 最も重要なこと:それはステートフルであり、ほとんどのバグは予期しない状態によって引き起こされます。後のクエリが影響を受けるように、の状態をDataLoadOptions変更します。DataContext必要な場所とタイミングで積極的な読み込みを定義することを好みます。入力は安価で、バグは高価です。

それにもかかわらず、完全を期すために、MuhammadMosaがDataLoadOptionsのEFバージョンにいくらかの努力を払ったことを言及する必要があります。私はそれを試したことはありません。

おそらくコードの繰り返しを防ぎたいと思います。ただし、複数の場所で同じ形状のクエリが必要な場合は、「グローバルに」定義されたインクルードの有無にかかわらず、すでにコードを繰り返しています。中心的なイーガーローディング構成は、疑似DRY-nessです。そしてすぐに、熱心な読み込みが望ましくないときに自分の足でつまずくことに気付くでしょうが、くそー、それは起こるように構成されています!

于 2012-08-25T20:39:58.563 に答える
5

Entity Framework は、'ObjectContext' 全体の一括読み込み設定をサポートしていません。ただし、必要なすべての「IQueryable」プロパティを、部分クラスのインクルード オプションで宣言できます。例えば:

public IQueryable<Order> Orders {
  get {
    return OrderSet.Include("OrderDetails");
  }
}
于 2012-08-25T17:21:34.190 に答える