0

古いバージョンの Entity Framework での以前の取り組みでは、Eager Loading の使用に慣れていました。そのため、ルート エンティティを取得し、必要に応じて「インクルード」を使用して関連エンティティを収集します。

私の現在のプロジェクトでは、データベース ファーストを使用して、最新バージョンの EF を新しいデータベースに実装しました。たとえば、次のクラスを見てください。

public partial class Zone
{
    public Zone()
    {
        this.OverrideCharges = new HashSet<OverrideCharge>();
    }

    public System.Guid RowId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<OverrideCharge> OverrideCharges { get; set; }
}

OverrideCharges オブジェクトには、その下にいくつかのサブプロパティもあり、それらの下に関連するエンティティがあります。

実際の DB コンテキストと一連の DTO コンテキストの 2 つのコンテキストがあります。後者のオブジェクトはほとんどが前者のコピーです。Zone_dto オブジェクトはほとんどオリジナルのクローンです。両方で、次を使用して遅延読み込みをオフにしました。

    public CContext(): base("BreezeMetaData")
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

    public UDBEntities()
        : base("name=UDBEntities")
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

次に、次のようにして Zone オブジェクトをクエリします。

    public List<Zone_dto> GetZones()
    {
        List<Zone> zones = _cilContext.Zones.ToList();
        List<Zone_dto> zone_dtos = new List<Zone_dto>();

        foreach (Zone zn in zones)
        {
            zone_dtos.Add(Mapper.Map<Zone, Zone_dto>(zn));
        }

        return zone_dtos;
    }

だから - 含まれていません。また、遅延読み込みは無効になっています。Zone オブジェクトとその直接のプロパティのリストが返されることを期待していますが、関連するエンティティは返されません。

しかし、返されるのは、Zone オブジェクトと、それらのすべての OverrideCharges、およびこれらの OverrideCharge に関連するすべてのエンティティなどであり、ツリーのずっと下まで続きます。

これらのデータ オブジェクトは巨大ではなく、大規模な問題ではありません。しかし、私が要求していないこのすべてのデータを取得する理由が理解できないことに不満を感じています。誰か説明できますか?

4

2 に答える 2