我有这两个班级:
public class MyModel()
{
public int Id {get; set;}
public string Name {get; set;}
public bool IgnoreModel {get; set;}
}
public class MyDto()
{
public int Id {get; set;}
public string Name {get; set;}
public bool IgnoreDto {get; set;}
}
我想忽略IgnoreModel
和IgnoreDto
。我的映射看起来像这样:
Mapper.CreateMap<MyModel, MyDto>().Bidirectional()
.ForMember(model=> model.IgnoreModel, option => option.Ignore())
.ForSourceMember(dto => dto.IgnoreDto, option => option.Ignore());
其中Bidirectional()是扩展名:
public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
return Mapper.CreateMap<TDestination, TSource>();
}
但是,我收到IgnoreDto
未映射的错误:
`找到未映射的成员。查看下面的类型和成员。 添加自定义映射表达式,忽略,添加自定义解析程序或修改源/目标类型
MyModel - &gt; MyDto(目的地成员列表) ModelAssembly.MyModel - &gt; DtoAssembly.MyDto(目标成员列表)
未映射的属性: IgnoreDto`
忽略这种映射的正确方法是什么?
答案 0 :(得分:1)
在映射之后应用您的扩展(返回另一个对象)使您的映射规则适用于第二个映射。您的第一个映射没有应用任何规则。
要使其工作,请分别对每个映射使用ignore:
Mapper.CreateMap<MyModel, MyDto>()
.ForMember(model=> model.IgnoreModel, option => option.Ignore());
Mapper.CreateMap<MyDto, MyModel>()
.ForMember(model=> model.IgnoreDto, option => option.Ignore());