0

N層アプリケーションでWCFと組み合わせてEF5コードファーストを使用しています。

クライアントとサーバーの間で関連エンティティを非同期的かつ段階的にロードしています。すべてがうまく機能していますが、いくつかの最適化を行いたいと思います。

Car関連エンティティを持つ架空のエンティティを考えてみましょうWheel:

public class Car
{
    public int Id { get; set; }        
    public virtual List<Wheel> Wheels { get; set; }
}

public class Wheel
{
    public int Id { get; set; }        
    public virtual int CarId { get; set; }
}

および関連する DTO:

public class CarDTO
{
    public int Id { get; set; }
    public virtual int CarId { get; set; }
    public virtual List<int> Wheels { get; set; }
}

WheelsDTO の外部キーのリストであることに注意してください。必ずしもすべてのオブジェクトを Web サービス経由で転送する必要はありません。必要に応じWheelて、クライアントは後の WCF 呼び出しでオブジェクトを読み込みます。現在、AutoMapper を使用して、関連するエンティティを FK のリストにフラット化しています。

DbContextこれに関する問題は、オブジェクトを取得するときに、Web サービスが常に Wheel オブジェクト全体をロードする必要があるとは限らないCarことです。いずれにせよ、Web サービス経由でそれらを送信することはありません (後で要求されない限り)。しかし、クエリはホイール オブジェクト全体をデータベースから Web サービス呼び出しにロードしますが、破棄されるだけです。Wheelsあたり100 の場合Car、Web サービスとデータベースの間を流れる大量の不要なデータです。

私がやりたいことはCar、次のようなものに変更することです:

public class Car
{
    public int Id { get; set; }        
    public virtual List<Wheel> Wheels { get; set; }  // Normally empty
    public virtual List<int> WheelIDs { get; set; }  // Normally full
}

そのため、Web サービスがすべての をロードする必要があることを認識した場合、クエリにWheels追加することでロードできますが、通常は、後で取得できる.Include(car => car.Wheel)FK のリストを返すだけです。WheelIDs

EF5 はこれを簡単に実行できますか? もしそうなら、どのように?

4

1 に答える 1