如何使用 AutoMapper 忽略目标成员?

How to ignore destination member with 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 IgnoreDto {get; set;}
}

我想忽略 IgnoreModelIgnoreDto。我的映射如下所示:

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 未映射的错误消息:

`找到未映射的成员。查看下面的类型和成员。 添加自定义映射表达式,忽略,添加自定义解析器,或修改source/destination类型

MyModel -> MyDto(目标成员列表) ModelAssembly.MyModel -> DtoAssembly.MyDto(目标成员列表)

未映射的属性: 忽略 Dto`

忽略这种映射的正确方法是什么?

在映射后应用您的扩展(returns 另一个对象)使您的映射规则应用于第二个映射。您的第一个映射没有应用任何规则。

要使其正常工作,请分别对每个映射使用忽略:

Mapper.CreateMap<MyModel, MyDto>()
.ForMember(model=> model.IgnoreModel, option => option.Ignore());

Mapper.CreateMap<MyDto, MyModel>()
.ForMember(model=> model.IgnoreDto, option => option.Ignore());