C# 如何使用AutoMapper忽略目标成员?
我有两门课:C# 如何使用AutoMapper忽略目标成员?,c#,automapper,C#,Automapper,我有两门课: 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 Ignore
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());
Mapper.CreateMap()双向()
.ForMember(model=>model.IgnoreModel,option=>option.Ignore())
.ForSourceMember(dto=>dto.IgnoreDto,option=>option.Ignore());
其中双向()是一个扩展:
public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
return Mapper.CreateMap<TDestination, TSource>();
}
publicstaticimappingexpression双向(此IMappingExpression表达式)
{
返回Mapper.CreateMap();
}
但是,我得到一个错误,IgnoreDto
未映射:
`找到了未映射的成员。查看下面的类型和成员。
添加自定义映射表达式、忽略、添加自定义解析程序或修改源/目标类型
MyModel->MyDto(目标成员列表)
modelsassembly.MyModel->DtoAssembly.MyDto(目标成员列表)
未映射属性:
忽视`
忽略这种映射的正确方法是什么?在映射使映射规则应用于第二个映射之后,应用扩展(返回另一个对象)。您的第一个映射没有应用任何规则
要使其正常工作,请分别在每个映射上使用“忽略”:
Mapper.CreateMap<MyModel, MyDto>()
.ForMember(model=> model.IgnoreModel, option => option.Ignore());
Mapper.CreateMap<MyDto, MyModel>()
.ForMember(model=> model.IgnoreDto, option => option.Ignore());
Mapper.CreateMap()
.ForMember(model=>model.IgnoreModel,option=>option.Ignore());
Mapper.CreateMap()
.ForMember(model=>model.IgnoreDto,option=>option.Ignore());
我觉得这很合适。Mapper.assertconfigurationsvalid()的输出是什么?另外,出于好奇,删除Bidirectional()
和手动映射model->dto和dto->model有什么区别吗?Bidirectional
方法从何而来?@AndrewWhitaker这是我写的一个扩展。