尽管设置了忽略操作,但AutoMapper会引发Unmapped属性异常

wmi*_*ski 2 c# asp.net automapper asp.net-core

我正在尝试将我的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>();
        }
    }
Run Code Online (Sandbox Code Playgroud)

和用法

var category = mapper.Map<CategoryResource, Category>(categoryResource);
Run Code Online (Sandbox Code Playgroud)

如上面的代码抛出这种错误:

找到未映射的成员。在下面查看类型和成员。添加自定义映射表达式,忽略,添加自定义解析器或修改源/目标类型对于没有匹配的构造函数,请添加no-arg ctor,添加可选参数或映射所有构造函数参数======= ================================================== ================== CategoryResource-> Category(目标成员列表)

未映射的属性:产品

我将映射配置文件更改为:

CreateMap<CategoryResource, Category>()
                .ForMember(x=>x.Products, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)

但仍然,我有同样的错误。您能告诉我我在这里做错了什么吗?我已经重新启动了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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

Kir*_*kin 5

6.2开始,AutoMapper 会动态创建类型映射在此处记录):

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

鉴于MappingProfile示例代码中唯一要做的就是忽略该Products属性,这使我认为MapperProfile未注册该属性。

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