尽管设置了忽略操作,AutoMapper仍会抛出Unmapped属性异常

时间:2017-12-11 03:28:51

标签: c# asp.net asp.net-core automapper

我正在尝试将我的DTO类映射到本机类。以下是课程:

public class CategoryResource
    {
        public int Id { get; set; }
        public string Code { get; set; }
        public string Description { get; set; }
    }

public class Category
    {
        public int Id { get; set; }
        [Required]
        [StringLength(255)]
        public string Code { get; set; }
        [StringLength(255)]
        public string Description { get; set; }
        public ICollection<CategoryToProduct> Products { get; set; }

        public Category()
        {
            Products = new Collection<CategoryToProduct>();
        }
    }

和用法

var category = mapper.Map<CategoryResource, Category>(categoryResource);

如上所述,代码会抛出此类错误:

  

找到未映射的成员。查看下面的类型和成员。添加一个   自定义映射表达式,忽略,添加自定义解析程序或修改   源/目标类型对于没有匹配的构造函数,添加一个无参数   ctor,添加可选参数,或映射所有构造函数参数   ================================================== ========================= CategoryResource - &gt;类别(目的地成员列表)

     

未映射的属性:产品

我将我的地图配置文件更改为:

CreateMap<CategoryResource, Category>()
                .ForMember(x=>x.Products, opt => opt.Ignore());

但是,我仍有同样的错误。 你能告诉我这里我做错了什么吗? 我已经重新启动了IIS,AutoMapper版本是6.2.2

要回答评论中的问题,那就是整个MappingProfile

public class MappingProfile : Profile
    {
        public MappingProfile()
        {
            //Domain to API
            CreateMap<Type, TypeResource>();
            CreateMap<Unit, UnitResource>();
            CreateMap<Category, CategoryResource>();


            //API to domain
            CreateMap<TypeResource, Type>();
            CreateMap<UnitResource, Unit>();

            CreateMap<CategoryResource, Category>()
                .ForMember(x=>x.Products, opt => opt.Ignore());
        }
    }

1 个答案:

答案 0 :(得分:5)

6.2起,AutoMapper 即时创建类型地图(记录为here):

  

首次调用Mapper.Map时,AutoMapper将创建类型映射配置并编译映射计划。

鉴于MappingProfile在您的示例代码中唯一的做法是忽略Products属性,这使我相信MapperProfile未被注册。

有关如何注册自定义Profile的详细信息,请参阅Jimmy Bogard的Integrating AutoMapper with ASP.NET Core DI。总而言之,您可以使用AutoMapper.Extensions.Microsoft.DependencyInjection nuget包并使用默认值或提供您自己需要扫描的程序集列表。