1

2つのDTOがあります。

public class MasterDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<DetailDTO> Details { get; set; }
}

public class DetailDTO
{
    public int Id { get; set; }
    public string DetailName { get; set; }
}

また、私は機能を持っています:

using (var context = new Context())
{
    var r = context.MasterData
                   .Select(d => new MasterDTO
                   {
                       Id = d.Id,
                       Name = d.Name,
                   }
}

DetailDTOのリストにも記入し、1回のリクエストでそれを行う必要があります。

この時点で、DetailsDataデータのリストを取得し、foreachを介してMasterDTOに追加する必要があります。これにより、もちろんデータベースサーバーに多くのリクエストが発生します。

より良い解決策はありますか?

4

1 に答える 1

5

データ呼び出しでは、DetailDataに熱心な負荷をかけます。例:

var r = context.MasterData.Include("DetailData")

DetailDataMasterDataは、エンティティにアタッチされているナビゲーションプロパティの名前である必要があります。

これにより、の呼び出しとともに詳細データがプルされますMasterData

完全な呼び出しは次のようになります。

using (var context = new Context())
{
    context.LazyLoadingEnabled = false;
    var r = context.MasterData.Include("DetailData")
        .Select(d => new MasterDTO()
        {
            Id = d.Id,
            Name = d.Name,
            Details = d.Details.Select(dt => new DetailDTO()
            {
                Id = dt.Id,
                DetailName = dt.DetailName
            })
        });
}
于 2013-03-09T15:14:24.713 に答える