2017-03-20 118 views
1

工作,我有这些模型: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

默认情况下,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>(); 
}