[英]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
中每个SerialNumber
的SerialNumberName
属性映射到名为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. 尝试首先映射项SerialNumber
和SerialNumberModel
,然后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.