我正在尝试将我的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());
}
}
答案 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包并使用默认值或提供您自己需要扫描的程序集列表。