简体   繁体   English

尝试映射嵌套对象时出现Automapper错误

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

I have a Box object which has a list of SerialNumber objects nested within it. 我有一个Box对象,其中嵌套了一系列SerialNumber对象。 I'm trying to map the SerialNumberName property of each SerialNumber in each Box to a model called BoxedElectrodesModel . 我正在尝试将每个Box中每个SerialNumberSerialNumberName属性映射到名为BoxedElectrodesModel的模型。

Here is my Box class and its nested SerialNumber class: 这是我的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; }
}

...and here is my 'BoxedElectrodesRowModel' class and its nested SerialNumberModel class: ...这是我的'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; }
}

Here's my AutoMapper code: 这是我的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));

And here is my error message: 这是我的错误信息:

"Custom configuration for members is only supported for top-level individual members on a type." “仅一种类型的顶级单个成员支持成员的自定义配置。”

The problem, I think, has something to do with the fact that I'm trying to map the nested property SerialNumberName from Box > SerialNumbers to the nested property Name from BoxedElectrodesRowModel > SerialNumbers . 我认为问题与以下事实有关:我试图将Box > SerialNumbers的嵌套属性SerialNumberName映射到BoxedElectrodesRowModel > SerialNumbers的嵌套属性Name

How do I go about fixing this? 我该如何解决这个问题?

Try to map the the items SerialNumber and SerialNumberModel firstly and then AutoMapper will use that mapping when it is mapping from one list to another. 尝试首先映射项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