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)
从6.2开始,AutoMapper 会动态创建类型映射(在此处记录):
首次调用Mapper.Map时,AutoMapper将创建类型映射配置并编译映射计划。
鉴于MappingProfile示例代码中唯一要做的就是忽略该Products属性,这使我认为MapperProfile未注册该属性。
请参阅Jimmy Bogard的将AutoMapper与ASP.NET Core DI集成,以获取有关如何注册自定义Profiles的更多详细信息。总而言之,您可以使用AutoMapper.Extensions.Microsoft.DependencyInjection nuget程序包,并使用默认值或提供您自己需要扫描的程序集列表。
| 归档时间: |
|
| 查看次数: |
6853 次 |
| 最近记录: |