将DTO列表添加到主DTO

时间:2013-03-09 14:52:05

标签: c# entity-framework dto

我有两个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列表,并在一个请求中完成。

此时,我必须获取DetailsData数据列表并通过 foreach 将其添加到MasterDTO,这当然会对数据库服务器产生大量请求。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

在您的数据通话中,对您的DetailData进行急切加载。 例如:

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

DetailData 应该是附加到MasterData实体的导航属性的名称。

这会导致详细数据与您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
            })
        });
}