C# 属性不存在时自动映射';来源不存在
我正在尝试使用Automapper将ViewModel映射到域类 但是,ViewModel包含的属性在域类中不存在 相反,我使用了不同的属性Product,从Domain类映射到ViewModel Price属性,但这似乎不起作用C# 属性不存在时自动映射';来源不存在,c#,automapper,C#,Automapper,我正在尝试使用Automapper将ViewModel映射到域类 但是,ViewModel包含的属性在域类中不存在 相反,我使用了不同的属性Product,从Domain类映射到ViewModel Price属性,但这似乎不起作用 public class OrderViewModel { public IEnumerable<Product> Product { get; set; } public IEnumerable<Price> Price {
public class OrderViewModel
{
public IEnumerable<Product> Product { get; set; }
public IEnumerable<Price> Price { get; set; }
}
public class Order
{
public IEnumerable<Product> Product { get; set; }
}
public class Product
{
public string Code { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Amount { get; set; }
public decimal DeliveryCharge { get; set; }
}
public class Price
{
public string UniqueProductCode { get; set; }
public decimal Charge { get; set; }
public decimal CourierCharge { get; set; }
}
公共类OrderViewModel
{
公共IEnumerable乘积{get;set;}
公共IEnumerable Price{get;set;}
}
公共阶级秩序
{
公共IEnumerable乘积{get;set;}
}
公共类产品
{
公共字符串代码{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共十进制数{get;set;}
公共十进制交付费用{get;set;}
}
公共类价格
{
公共字符串UniqueProductCode{get;set;}
公共十进制电荷{get;set;}
公共十进制信使目标{get;set;}
}
然后,在我的映射配置文件中,我设置了以下内容:
public class DomainToViewModelMappingProfile : Profile
{
public override string ProfileName
{
get
{
return "DomainToViewModelMappings";
}
}
public DomainToViewModelMappingProfile()
{
ConfigureMappings();
}
/// <summary>
/// Creates a mapping between source (Domain) and destination (ViewModel)
/// </summary>
private void ConfigureMappings()
{
CreateMap<Core.Domain.Product, Web.Models.Price>()
.ForMember(dest => dest.UniqueProductCode,
opts => opts.MapFrom(src => src.Code))
.ForMember(dest => dest.Charge,
opts => opts.MapFrom(src => src.Amount))
.ForMember(dest => dest.CourierCharge,
opts => opts.MapFrom(src => src.DeliveryCharge));
CreateMap<Core.Domain.Order, OrderViewModel>()
.ForMember(dest => dest.Product,
opts => opts.MapFrom(src => src.Product))
.ForMember(dest => dest.Price,
opts => opts.MapFrom(src => new List<Price>() ));
}
}
public类DomainToViewModelMappingProfile:Profile
{
公共重写字符串配置文件名
{
得到
{
返回“DomainToviewModelAppings”;
}
}
公共领域OvidEWModelMappingProfile()
{
配置映射();
}
///
///创建源(域)和目标(ViewModel)之间的映射
///
私有void配置映射()
{
CreateMap()
.FormMember(dest=>dest.UniqueProductCode,
opts=>opts.MapFrom(src=>src.Code))
.FormMember(目的=>目的地费用,
opts=>opts.MapFrom(src=>src.Amount))
.FormMember(dest=>dest.CourierCharge,
opts=>opts.MapFrom(src=>src.DeliveryCharge));
CreateMap()
.FormMember(目标=>目标产品,
opts=>opts.MapFrom(src=>src.Product))
.FormMember(目的地=>目的地价格,
opts=>opts.MapFrom(src=>newlist());
}
}
在我的控制器中,我有:
var list = _productRepository.GetProducts();
Mapper.Map<Order, OrderViewModel>(list );
var list=\u productRepository.GetProducts();
地图(列表);
但是Price属性是空的(不是null),因为该属性已经实例化。只是没有记录
我做错了什么?你能显示你用来映射的代码吗?
.formmember(dest=>dest.Price,opts=>opts.MapFrom(src=>newlist())代码>等同于“对于成员‘价格’,只需创建一个空列表。”-这就是您所指的吗?添加在映射配置文件代码@sachin中。@stuartd是的,但我不希望出现空列表。我希望Price属性基于映射填充。您特别指示AutoMapper使用空列表。您的映射代码不正确,并且问题中没有足够的信息来查看它应该是什么,例如,list
的类型是什么?如果出现运行时错误,您可能需要向select添加.ToArray(),如下所示:opts=>opts.MapFrom(src=>src.Product.select(p=>new Price{Charge=p.Amount,CourierCharge=p.DeliveryCharge,UniqueProductCode=p.Code}).ToArray()图例。您的第一个答案很有效。谢谢。
.ForMember(dest=>dest.Price, opts=>opts.MapFrom(src=>new List<Price>()));
.ForMember(dest=>dest.Price, opts=>opts.MapFrom(src=>src.Product.Select(p=>new Price {Charge = p.Amount,CourierCharge = p.DeliveryCharge,UniqueProductCode = p.Code})));