2

私は次のコードを持っています:

var carsContext = new CarsDataContext();

IQueryable<Car> allCars = carsContext.Cars;

foreach (var car in allCars) 
    Console.WriteLine(car.Color);

私が欲しいのは、各車のオブジェクトがそれを取得するために使用された元のデータコンテキストを認識し、次のようなヘルパーメソッドで装飾できるようにすることです。

foreach (var car in allCars)
    Console.WriteLine(car.GetOwner().Lastname);

GetOwner()メソッドを使用すると、元のデータコンテキストを次のデータベースに自動的に再利用できますが、今のところ、同じ効果を得るには醜いことをする必要があります。

foreach (var car in allCars)
{
    car.SetDataContext(carsContext);
    Console.WriteLine(car.GetOwner().Lastname);
}

この情報はすでにオブジェクトで利用可能ですか、それともオブジェクトがコレクションから取得されたときにこれを自動割り当てするカスタムIQueryable実装を作成してみる必要がありますか?

パフォーマンス上の理由から、データベースに対する式の遅延評価をSQLとして保持したいので、この方法でこれを実行しようとしています(データセットが大きい)。

アドバイスをいただければ幸いです。

編集:これは単純化された例です。たとえば、元のデータコンテキストへの参照がすぐに利用できるとは限りません。

4

1 に答える 1

2

EFを使用していますか?最初に car エンティティを取得するときに .Include(c => c.Owner) を実行できます。遅延読み込みは保持されますが、所有者エンティティと車を取得するようになりました。また、車のインスタンスごとに 100 回データベースに戻るのに対して、1 回の結合クエリを実行しているため、パフォーマンスが向上する可能性があります。

于 2012-06-22T16:31:02.283 に答える