2

私は読み取り専用のデータベースを持っているので、ObjectTracking をオフにしています (したがって、暗黙的に DeferredLoading をオフにしています)。

遅延読み込みを行い、LoadWith<> を使用したくない。

データ自体が必要になる直前に、Linq にリレーションを遅延フェッチするように明示的に指示する最も簡単な方法は何ですか。

例: 単純な dbml 代替テキスト

次のコードがある場合:

  TestDbDataContext context = new TestDbDataContext(Settings.Default.TestersConnectionString);
  context.ObjectTrackingEnabled = false;

  var result = context.Employees.ToList();
  foreach (var employee in result)
  {
    // HERE Should load gift list
    foreach (var gift in employee.Gifts)
    {
      Console.WriteLine(gift.Name);
    }
  }

完全なクエリを再度作成できることはわかっていますが、より良い方法を一緒に見つけられることを願っています。

4

2 に答える 2

2

あなたはシステムと戦っています... 2つの考え:

  • 他のデータ (ネストされた ) が必要であることがわかっている場合foreach、なぜ使用したくないのでしょうLoadWithか? それはほとんど教科書のユースケースです
  • 遅延読み込みにはオブジェクト追跡が必要であることを(投稿から)知っているので、オブジェクト追跡を有効にしないのはなぜですか。通常、データ コンテキストは「作業単位」(つまり、存続期間が短い) と見なす必要があるため、実際にはあまり問題にはなりません。

これら 2 つのオプション (オブジェクト トラッキングと遅延読み込み) がリンクされている理由については、こちらの公式の回答を参照してください。

于 2009-04-01T09:09:46.080 に答える
0

LazyList を使用する: http://blog.wekeroad.com/blog/lazy-loading-with-the-lazylist/

于 2009-04-01T12:06:30.837 に答える