2017-01-19 137 views
0

我有一個Box對象,它有一個嵌套在其中的SerialNumber對象列表。我試圖將Box中的每個SerialNumberSerialNumberName屬性映射到名爲BoxedElectrodesModel的模型。嘗試映射嵌套對象時出現Automapper錯誤

這是我Box類及其嵌套SerialNumber類:

public partial class Box 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Box() 
    { 
     this.SerialNumbers = new HashSet<SerialNumber>(); 
    } 

    public int BoxID { get; set; } 
    public System.DateTime DateCreated { get; set; } 
    public Nullable<System.DateTime> DateShipped { get; set; } 
    public string TrackingNumber { get; set; } 
    public Nullable<System.DateTime> DateReceived { get; set; } 
    public bool Active { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<SerialNumber> SerialNumbers { get; set; } 
} 

public partial class SerialNumber 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public SerialNumber() 
    { 
     this.Comments = new HashSet<Comment>(); 
     this.WIPHistories = new HashSet<WIPHistory>(); 
    } 

    public int SerialNumberID { get; set; } 
    public int IncomingLotID { get; set; } 
    public string SerialNumber1 { get; set; } 
    public string LamPurchaseOrder { get; set; } 
    public string LamLineNumber { get; set; } 
    public bool Refurbished { get; set; } 
    public int WIPLocationID { get; set; } 
    public int StatusID { get; set; } 
    public int RouteSectionStepID { get; set; } 
    public Nullable<int> RejectCategoryID { get; set; } 
    public Nullable<int> BoxID { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Comment> Comments { get; set; } 
    public virtual IncomingLot IncomingLot { get; set; } 
    public virtual RejectCategory RejectCategory { get; set; } 
    public virtual Status Status { get; set; } 
    public virtual WIPLocation WIPLocation { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<WIPHistory> WIPHistories { get; set; } 
    public virtual Box Box { get; set; } 
    public virtual RouteSectionStep RouteSectionStep { get; set; } 
} 

......這裏是我的 'BoxedElectrodesRowModel' 類及其嵌套SerialNumberModel類:

public class BoxedElectrodesRowModel 
{ 
    public int BoxId { get; set; } 
    public List<SerialNumberModel> SerialNumbers { get; set; } 
    public Nullable<System.DateTime> DateCreated { get; set; } 
} 

public class SerialNumberModel 
{ 
    public string Name { get; set; } 
} 

這是我的AutoMapper代碼:

  c.CreateMap<Box, BoxedElectrodesRowModel>() 
       .ForMember(dest => dest.BoxId, opts => opts.MapFrom(src => src.BoxID)) 
       .ForMember(dest => dest.SerialNumbers.Select(sn => sn.Name), opts => opts.MapFrom(src => src.SerialNumbers.Select(t => t.SerialNumberName))) 
       .ForMember(dest => dest.DateCreated, opts => opts.MapFrom(src => src.DateCreated)); 

這裏是我的錯誤信息:

「的成員自定義配置僅支持一個類型的頂級 個人會員。」

的問題,我認爲,有事情做的事實,我想嵌套屬性SerialNumberNameBox>SerialNumbers映射到從BoxedElectrodesRowModel>SerialNumbers嵌套屬性Name

我該如何解決這個問題?

+0

您使用的是什麼版本的automapper? – CodingYoshi

+0

@CodingYoshi 5.1.1版 –

回答

0

嘗試首先映射項目SerialNumberSerialNumberModel,然後AutoMapper將在從一個列表映射到另一個列表時使用該映射。

Mapper.Initialize(cfg => 
{ 
    cfg.CreateMap<SerialNumber, SerialNumberModel>() 
     .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.SerialNumberName)); 
    cfg.CreateMap<Box, BoxedElectrodesRowModel>() 
     .ForMember(dest => dest.BoxId, opts => opts.MapFrom(src => src.BoxID)) 
     .ForMember(dest => dest.DateCreated, opts => opts.MapFrom(src => src.DateCreated)); 
});