我有这些模特:
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
个集合
如何修复我的映射配置以实现双向工作?
答案 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>();
}