自动映射器不在反向映射中工作

时间:2017-03-20 16:04:23

标签: c# asp.net asp.net-core-mvc automapper

我有这些模特:

public class DownloadRequest {
    public int Id { get; set; }
    public DateTime Date { get; set; } = DateTime.Now;
    public bool IsProcessed { get; set; }
    public string Output { get; set; }

    public ICollection<DownloadCategory> DownloadCategories { get; } = new HashSet<DownloadCategory>();
}

public class DownloadCategory {
    public int Id { get; set; }
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    public virtual int RequestId { get; set; }
    public virtual DownloadRequest Request { get; set; }

    public ICollection<DownloadDocument> DownloadDocuments { get; } = new HashSet<DownloadDocument>();
}

 public class DownloadDocument {
    public int Id { get; set; }
    public int Document { get; set; }
    public string Path { get; set; }
    public virtual int CategoryId { get; set; }
    public virtual DownloadCategory Category { get; set; }
}

 public class DownloadRequestVM  {
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public bool IsProcessed { get; set; }
    public string Output { get; set; }
    public ICollection<DownloadCategoryVM> DownloadCategories { get; set; } = new HashSet<DownloadCategoryVM>();

    public string Status {
        get {
            return IsProcessed ? "Processed" : "Processing";
        }
    }

    public string RealDate {
        get {
            return string.Format("{0:d/M/yyyy HH:mm:ss}", Date);
        }
    }
}

 public class DownloadCategoryVM {
    public int Id { get; set; }
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    public int RequestId { get; set; }
    public ICollection<DownloadDocumentVM> DownloadDocuments { get; set; } = new HashSet<DownloadDocumentVM>();
}

public class DownloadDocumentVM {
    public int Document { get; set; }
    public string Path { get; set; }
}

我在下面配置了我的地图:

 cfg.CreateMap<DownloadDocument, DownloadDocumentVM>().ReverseMap();
            cfg.CreateMap<DownloadCategory, DownloadCategoryVM>()
                .ForMember(d => d.DownloadDocuments, opt => opt.MapFrom(s => s.DownloadDocuments))
                .ReverseMap()
                .ForMember(d => d.DownloadDocuments, opt => opt.MapFrom(s => s.DownloadDocuments))
                .ForMember(dest => dest.Request, opt => opt.Ignore());
            cfg.CreateMap<DownloadRequest, DownloadRequestVM>()
                .ForMember(d => d.DownloadCategories, opt => opt.MapFrom(s => s.DownloadCategories))
                .ReverseMap()
                .ForMember(d => d.DownloadCategories, opt => opt.MapFrom(s => s.DownloadCategories));

当我尝试这种映射时mapper.Map<IEnumerable<DownloadRequest>, IEnumerable<DownloadRequestVM>>(entities)工作正常。但是此mapper.Map<DownloadRequestVM, DownloadRequest>(request)仅映射DownloadRequest类,而不映射DownloadDocuments个集合

如何修复我的映射配置以实现双向工作?

1 个答案:

答案 0 :(得分:1)

Automapper默认忽略没有setter的属性。在您的虚拟机上,您有ICollection<DownloadDocumentVM> DownloadDocuments { get; set; },但根据请求,您只有{ get; }。添加set

public class DownloadRequest {
    public int Id { get; set; }
    public DateTime Date { get; set; } = DateTime.Now;
    public bool IsProcessed { get; set; }
    public string Output { get; set; }

    public ICollection<DownloadCategory> DownloadCategories { get; set; } 
        = new HashSet<DownloadCategory>();
}