C# 属性不存在时自动映射';来源不存在

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 {

我正在尝试使用Automapper将ViewModel映射到域类

但是,ViewModel包含的属性在域类中不存在

相反,我使用了不同的属性Product,从Domain类映射到ViewModel 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})));