0

我一直在尝试使用 AutoMapper 将我的实体映射到我的视图模型。并面临嵌套集合映射的问题。

来源

public class Consignment
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<ConsignmentLine> ConsignmentLines { get; set; }
    public ICollection<ConsignmentDocument> ConsignmentDocuments { get; set; }
}

public class ConsignmentLine
{
    public Guid Id { get; set; }
    public Guid ConsignmentId { get; set; }
    public ICollection<ConsignmentDocument> ConsignmentDocuments { get; set; }
}

public class ConsignmentDocument
{
    public Guid Id { get; set; }
    public Guid ConsignmentId { get; set; }
    public Guid ConsignmentLineId { get; set; }
    public string DocumentName { get; set; }
}

public class ConsignmentLineViewModel
{
    public Guid Id { get; set; }
    public Guid ConsignmentId { get; set; }
    public ICollection<ConsignmentDocumentViewModel> ConsignmentDocuments { get; set; }
}
 
public class ConsignmentDocumentViewModel
{
    public Guid Id { get; set; }
    public Guid ConsignmentId { get; set; }
    public Guid ConsignmentLineId { get; set; }
    public string DocumentName { get; set; }
}

目的地

public class ConsignmentDetailsViewModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<ConsignmentLineViewModel> ConsignmentLines { get; set; }
    public ICollection<ConsignmentDocumentViewModel> ConsignmentDocuments { get; set; }
}

我可以很容易地为每个货物映射 consignmentDocuments,但是在为每个货物映射 consignmentlines 时,我得到一个“AutoMapper 异常”。我知道正在生成异常,因为每个 consignmentLine 都有自己的 consignmentDocuments 集合。

现在我的自动映射器配置文件

CreateMap<Consignment, ConsignmentDetailsViewModel>()
            .ForMember(vm => vm.consignmentLineViewModel, opt => opt.MapFrom(model => model.ConsignmentLine.ToList()))
            .ForMember(vm => vm.consignmentDocumentViews, opt => opt.MapFrom(model => model.ConsignmentDocument.ToList()));

如何将它们全部映射到 ConsignmentViewModel 类?

4

2 回答 2

0

解决了这个问题。

解决方案是为 ConsignmentLine 创建一个映射以获取 ConsignmentDocuments 的集合。

CreateMap<Consignment, ConsignmentDetailsViewModel>()
        .ForMember(vm => vm.consignmentLineViewModel, opt => opt.MapFrom(model => model.ConsignmentLine))
        .ForMember(vm => vm.consignmentDocumentViews, opt => opt.MapFrom(model => model.ConsignmentDocument));

CreateMap<ConsignmentLine, ConsignmentLineViewModel>()
            .ForMember(vm => vm.consignmentDocumentViews, opt => opt.MapFrom(model => model.ConsignmentDocument));
于 2020-08-23T11:38:00.983 回答
0

如果您在 AutoMapper 事务中操作简单而不考虑太复杂,则可以执行所有事务。

例子:

 CreateMap<Consignment, ConsignmentDetailsViewModel>();
 CreateMap<ConsignmentLine, ConsignmentLineViewModel>();
 CreateMap<ConsignmentDocument, ConsignmentDocumentViewModel>();
 
于 2020-08-31T06:34:05.383 回答