簡體   English   中英

嘗試映射嵌套對象時出現Automapper錯誤

[英]Getting Automapper error when trying to map nested objects

我有一個Box對象,其中嵌套了一系列SerialNumber對象。 我正在嘗試將每個Box中每個SerialNumberSerialNumberName屬性映射到名為BoxedElectrodesModel的模型。

這是我的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));

這是我的錯誤信息:

“僅一種類型的頂級單個成員支持成員的自定義配置。”

我認為問題與以下事實有關:我試圖將Box > SerialNumbers的嵌套屬性SerialNumberName映射到BoxedElectrodesRowModel > SerialNumbers的嵌套屬性Name

我該如何解決這個問題?

嘗試首先映射項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 ) );
} );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM