Automapper 8测绘工作不正常

问题描述 投票:-1回答:1

我有两个模型类,当我尝试使用Automapper ForMember方法不同名称的不同属性映射。它轻视不同属性的映射的automapper配置验证异常。

我已经尝试了很多,但它不help.I不知道什么时候我尝试地图Quntity属性数量,属性为什么它是抛出异常。但是当我在这两个模型类放在同一个名称的属性,然后它的工作原理

下面是位于所有的模型类,例外和配置有关automapper。

能否请你帮我,怎么解决问题呢?

 public class ProductModel
    {
        public ProductModel()
        {
            Id = GuidContext.Current.NewGuid();
            ProductHistory = new HashSet<ProductHistoryModel>();
        }

        public Guid Id { get; set; }
        public string ProductCode { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public bool IsActive { get; set; }
        public decimal? Price { get; set; }
        public int? Quntity { get; set; }
        public Guid ProductCategoryId { get; set; }
        public Guid? BrandId { get; set; }

        public Guid ProductAttributeId { get; set; }

        public virtual BrandModel Brand { get; set; }
        public virtual ProductCategoryModel ProductCategory { get; set; }

        public virtual ProductAttributeModel ProductAttribute { get; set; }
        public virtual ICollection<ProductHistoryModel> ProductHistory { get; set; }
    }

The another class is 

public class ProductModel
    {       
        public string Name { set; get; }

        //public List<string> Attributes { set; get; }

        //public string Brand { get; set; }

        public decimal? Price
        {
            get; set;
        }
        public int? Quantity { get; set; }
    }
}

and the mapping configuration is

 public class ProductModelMapConfigurator :  Profile, IMapConfigurator
    {
        public void Configure()
        {
            Mapper.Initialize(cfg =>
            {
                CreateMap<StandardizeInventory.Models.Product.ProductModel, Models.ProductModel>()
                //.ForMember(dest => dest.Brand, opt => opt.MapFrom(src => src.Brand.Name))
                .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
                .ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.Price))
                .ForMember(dest => dest.Quantity, opt => opt.MapFrom(src => src.Quntity));                
                //.AfterMap((src, dest) => {
                  //  dest.Attributes = src.ProductAttribute.ProductAttributeValue.Select(x => x.Value).ToList();
                //});

                CreateMap<Models.ProductModel, StandardizeInventory.Models.Product.ProductModel>();

            });
        }
    }

下面是异常详细信息

AutoMapper.AutoMapperConfigurationException: 

Unmapped members were found. Review the types and members below.

Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type

For no matching constructor, add a no-arg ctor, add optional arguments, or map all of the constructor parameters

==========================================================================================

AutoMapper created this type map for you, but your types cannot be mapped using the current configuration.

ProductModel -> ProductModel (Destination member list)

StandardizeInventory.Models.Product.ProductModel -> InventoryStoreApi.Models.ProductModel (Destination member list)



Unmapped properties:

Quantity



   at AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable`1 typeMaps) in 

任何帮助,将不胜感激。谢谢

automapper automapper-6 automapper-8
1个回答
3
投票

您使用的是Profile错误,see the documentation on Profiles

您的个人资料应该是这样的:

 public class ProductModelMapConfigurator :  Profile, IMapConfigurator
    {
        public ProductModelMapConfigurator()
        {

                CreateMap<StandardizeInventory.Models.Product.ProductModel, Models.ProductModel>()
                //.ForMember(dest => dest.Brand, opt => opt.MapFrom(src => src.Brand.Name))
                .ForMember(dest => dest.Quantity, opt => opt.MapFrom(src => src.Quntity));                
                //.AfterMap((src, dest) => {
                  //  dest.Attributes = src.ProductAttribute.ProductAttributeValue.Select(x => x.Value).ToList();
                //});

                CreateMap<Models.ProductModel, StandardizeInventory.Models.Product.ProductModel>();

        }
    }

摆脱Mapper.Initialize呼叫在个人资料里,并更改配置文件使用一个构造函数,而不是不管这Configure方法。你也不需要MapFrom时的名称相匹配,这是“自动”,“AutoMapper”的。

© www.soinside.com 2019 - 2024. All rights reserved.