15

現時点では約 200 項目のクエリを含むドキュメント ジェネレーターがありますが、完了すると 500 以上になる可能性があります。最近、一部のマッピングが遅延読み込みを示していることに気付きました。これは、生成されるドキュメントに基づいてこれらすべてのプロパティにアクセスする必要があるため、ドキュメント ジェネレータに問題をもたらします。

コンテキストに指定できることは承知してDataLoadOptionsいますが、これにより、ロードされる可能性のあるすべての列を明示的に指定する必要が生じます。すべてのデータ フェッチが 1 つのコンテキストで行われるため、これは 1000 の北です。

コンテキストの遅延読み込みを無効にする方法、または積極的な読み込みを明示的に有効にして遅延読み込みプロパティを無視する方法はありますか? おそらく、DB コンテキスト クラスを拡張し、何かをオーバーライドしますか?

4

2 に答える 2

7

DeferredLoadingEnabledを設定し、次のようなリフレクションを使用してすべてのプロパティを含める必要があります。

DataLoadOptions dataLoadOptions = new DataLoadOptions();

foreach (PropertyInfo pi in typeof(SomeThingyClass).GetProperties())
{
    ParameterExpression paramExp = Expression.Parameter(typeof(SomeThingyClass), "s");
    Expression expr = Expression.Convert(Expression.Property(paramExp, pi.Name), typeof(object));
    LambdaExpression lambda = Expression.Lambda(expr, paramExp);
    dataLoadOptions.LoadWith((Expression<Func<SomeThingyClass, object>>) lambda);
}
于 2010-08-02T13:40:24.347 に答える
1

これは、LINQ to SQL では注意が必要です。簡単に言えば、場合によるということです。

これを反映する関係を持つような方法でエンティティがレイアウトされている場合:

Customers -> Orders -> OrderDetails

決定を下すには、3 つのエンティティすべてのプロパティを評価する必要があります。最善の方法は、結合を作成することです。Usingは単一のステートメント.LoadWithをフェッチCustomersOrdersて使用しますが、すべての単一OrderDetailsレコードに対してもクエリを発行します。

そのため、LoadWith ですべての子関係を指定したとしても、結果を取得するために単一のクエリが発行されることはありません。

于 2010-08-02T14:23:23.590 に答える