データベースへの往復を減らすために、親オブジェクトの子コレクションを「プリロード」したいと考えていました。子コレクションを構成するオブジェクトを DataContext キャッシュにロードした場合、Linq2SQL はデータベースにアクセスする代わりにそれらのオブジェクトを使用することを期待していました。
たとえば、2 つの子コレクション (Children と Cars) を持つ Person オブジェクトがあるとします。
私はこれがうまくいくかもしれないと思った:
var children = from p in dbc.Person
select p.Children;
var cars = from p in dbc.Person
select p.Cars;
var people = from p in dbc.Person
select p;
var dummy1 = children.ToList();
var dummy2 = cars.ToList();
foreach(var person in people){
Debug.WriteLine(person.Children.Count);
}
person.Children.Count
しかし、代わりに、すべての子が DataContext に既に読み込まれているにもかかわらず、への呼び出しごとにデータベースへの 1 回のトリップが発生します。
最終的に、私が探しているのは、データベースへのアクセスをできるだけ少なくして、完全なオブジェクト グラフ (複数の子コレクションを含む) をロードする方法です。
DataLoadOptions
クラス (および)は認識してLoadWith
いますが、1 つの子コレクションに限定されており、これが問題です。
オブジェクトを余分に操作することなく、完全なオブジェクト グラフを作成できる (もちろん、Linq2SQL オブジェクトもある) 場合は、ストアド プロシージャを使用してもかまいません。