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

时间:2015-01-30 14:13:12

标签: 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 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未映射的错误:

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

MyModel - &gt; MyDto(目的地成员列表) ModelAssembly.MyModel - &gt; DtoAssembly.MyDto(目标成员列表)

未映射的属性: IgnoreDto`

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

1 个答案:

答案 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());