将 DTO 列表添加到主 DTO

Dim*_*tri 1 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; }
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个功能:

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

我也需要填写 DetailDTO 列表并在单个请求中完成。

这时候,我要获取DetailsData数据列表,通过foreach将其添加到MasterDTO中,这当然会导致对数据库服务器的大量请求。

有更好的解决方案吗?

Kha*_*han 5

在您的数据调用中,对您的 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
            })
        });
}
Run Code Online (Sandbox Code Playgroud)

  • +1 因为这回答了问题。不过你必须小心。如果这是在您的数据层中,那么这不是您想要担心 DTO 中要传递给视图的内容的地方。这将数据层耦合到视图。如果这是一个重要的应用程序,最好包括完整的对象,然后在服务层进行 DTO 映射。 (2认同)