C# 自动映射禁用IgnoreMap属性一次

C# 自动映射禁用IgnoreMap属性一次,c#,automapper,C#,Automapper,我的目标实体中有一个具有IgnoreMap属性的属性 我只想禁用一次。我使用automapperlist来列出映射 public class TestDto { public string Name { get; set; } public DateTime UpdateDate { get; set; } } public class Test { public string Name { get; set; } //Normally, I want to

我的目标实体中有一个具有IgnoreMap属性的属性

我只想禁用一次。我使用automapperlist来列出映射

public class TestDto {
    public string Name { get; set; }
    public DateTime UpdateDate { get; set; }

}

public class Test {
    public string Name { get; set; }
    //Normally, I want to ignore this entities all mapping except one method.
    [IgnoreMap]
    public DateTime UpdateDate { get; set; }

}

class Program {
    public void MapMethod(List<TestDto> sourceList)
    {
        var content = new MapperConfigurationExpression();
        content.CreateMap<TestDto,Test>();
        var config = new MapperConfiguration(content);
        var mapper = config.CreateMapper();
        //I do not want to ignore UpdateDate entity in here.
        var destinationList = mapper.Map<List<Test>>(sourceList);
    }
}
公共类TestDto{
公共字符串名称{get;set;}
公共日期时间更新日期{get;set;}
}
公开课考试{
公共字符串名称{get;set;}
//通常,除了一个方法之外,我希望忽略所有映射。
[忽略地图]
公共日期时间更新日期{get;set;}
}
班级计划{
公共void映射方法(列表源列表)
{
var content=新的MapperConfigurationExpression();
content.CreateMap();
var config=新的MapperConfiguration(内容);
var mapper=config.CreateMapper();
//我不想在这里忽略UpdateDate实体。
var destinationList=mapper.Map(sourceList);
}
}
您可以尝试以下方法:

_mapper.Map<DestType>(result, options => options.AfterMap((s, d) => ((DestType) d).Code = null));
\u mapper.Map(结果,选项=>options.AfterMap((s,d)=>((DestType)d.code=null));

完整示例

void Main()
{
    IConfigurationProvider conf = new MapperConfiguration(exp => exp.CreateMap<Src, Dest>());
    IMapper mapper = new Mapper(conf);

    var src = new Src(){
       Id =1,
       Name= "John Doe"
    };

    var result = mapper.Map<Dest>(src, options => options.AfterMap((s, d) => ((Dest) d).Name = null));
    result.Dump();

    var result2 = mapper.Map<List<Dest>>(srcList, options => options.AfterMap((s, d) => ((List<Dest>) d).ForEach(i => i.Name = null)));
    result2.Dump();

}

public class Src 
{
    public int Id {get; set;}
    public string Name {get; set;}
}

public class Dest
{
    public int Id {get; set;}
    public string Name {get; set;}
}
void Main()
{
IConfigurationProvider conf=新的MapperConfiguration(exp=>exp.CreateMap());
IMapper映射器=新映射器(conf);
var src=new src(){
Id=1,
Name=“约翰·多伊”
};
var result=mapper.Map(src,options=>options.AfterMap((s,d)=>((Dest)d.Name=null));
result.Dump();
var result2=mapper.Map(srcList,options=>options.AfterMap((s,d)=>((List)d.ForEach(i=>i.Name=null));
结果2.Dump();
}
公共类Src
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类目的地
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}


或者

void ConfigureMap(IMappingOperationOptions<Src, Dest> opt)
{
    opt.ConfigureMap()
        .ForMember(dest => dest.Name, m => m.Ignore());
};

 var result3 = mapper.Map<List<Dest>>(srcList, ConfigureMap());
 result3.Dump();
void配置映射(IMappingOperationOptions选项)
{
opt.ConfigureMap()
.ForMember(dest=>dest.Name,m=>m.Ignore());
};
var result3=mapper.Map(srcList,ConfigureMap());
result3.Dump();
您可以尝试以下方法:

_mapper.Map<DestType>(result, options => options.AfterMap((s, d) => ((DestType) d).Code = null));
\u mapper.Map(结果,选项=>options.AfterMap((s,d)=>((DestType)d.code=null));

完整示例

void Main()
{
    IConfigurationProvider conf = new MapperConfiguration(exp => exp.CreateMap<Src, Dest>());
    IMapper mapper = new Mapper(conf);

    var src = new Src(){
       Id =1,
       Name= "John Doe"
    };

    var result = mapper.Map<Dest>(src, options => options.AfterMap((s, d) => ((Dest) d).Name = null));
    result.Dump();

    var result2 = mapper.Map<List<Dest>>(srcList, options => options.AfterMap((s, d) => ((List<Dest>) d).ForEach(i => i.Name = null)));
    result2.Dump();

}

public class Src 
{
    public int Id {get; set;}
    public string Name {get; set;}
}

public class Dest
{
    public int Id {get; set;}
    public string Name {get; set;}
}
void Main()
{
IConfigurationProvider conf=新的MapperConfiguration(exp=>exp.CreateMap());
IMapper映射器=新映射器(conf);
var src=new src(){
Id=1,
Name=“约翰·多伊”
};
var result=mapper.Map(src,options=>options.AfterMap((s,d)=>((Dest)d.Name=null));
result.Dump();
var result2=mapper.Map(srcList,options=>options.AfterMap((s,d)=>((List)d.ForEach(i=>i.Name=null));
结果2.Dump();
}
公共类Src
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类目的地
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}


或者

void ConfigureMap(IMappingOperationOptions<Src, Dest> opt)
{
    opt.ConfigureMap()
        .ForMember(dest => dest.Name, m => m.Ignore());
};

 var result3 = mapper.Map<List<Dest>>(srcList, ConfigureMap());
 result3.Dump();
void配置映射(IMappingOperationOptions选项)
{
opt.ConfigureMap()
.ForMember(dest=>dest.Name,m=>m.Ignore());
};
var result3=mapper.Map(srcList,ConfigureMap());
result3.Dump();

您所说的只禁用一次是什么意思?您想在第一次之后不考虑
ignoreMap
?此外,如果您包含一些代码,那么更容易回答更具体的问题。我的意思是,我希望在所有业务逻辑中使用此属性,但只有一个方法,我需要忽略此属性。我准备了一些代码块以便于理解。我添加了代码示例。在我的业务逻辑中,除了一个方法之外,我忽略了UpdateDate我的所有实体。因为在那里我需要这个日期。@你能使用
AfterMap()
手动完成任务吗?你说的
只禁用一次是什么意思?您想在第一次之后不考虑
ignoreMap
?此外,如果您包含一些代码,那么更容易回答更具体的问题。我的意思是,我希望在所有业务逻辑中使用此属性,但只有一个方法,我需要忽略此属性。我准备了一些代码块以便于理解。我添加了代码示例。在我的业务逻辑中,除了一个方法之外,我忽略了UpdateDate我的所有实体。因为在那里我需要这个日期。@你能使用
AfterMap()
并手动执行分配吗?我如何使用AfterMap进行集合映射。因为我的源和目标类型是collection.var data=mapper.Map(items,options=>options.AfterMap((s,d)=>((List)d).ForEach(i=>i.UpdateDate=source.UpdateDate));好的,谢谢,但我不能再做了。我只想在这个方法中保留每个实体的原始UpdateDate。我还添加了更好的解决方案。请查收。如果你相信这个答案是有用的,请考虑将投票和/或标记为回答…所以我的案子不是忽略这里的财产。我有多种方法。其中只有一个需要保持价值,其他人必须忽略。所以我添加了忽略属性。但是,现在我需要在映射中保留原始值。好的,这是内联映射,它只适用于那个特定的方法。我需要在地图中保留原始值是什么意思?我如何使用AfterMap进行集合地图绘制。因为我的源和目标类型是collection.var data=mapper.Map(items,options=>options.AfterMap((s,d)=>((List)d).ForEach(i=>i.UpdateDate=source.UpdateDate));好的,谢谢,但我不能再做了。我只想在这个方法中保留每个实体的原始UpdateDate。我还添加了更好的解决方案。请查收。如果你相信这个答案是有用的,请考虑将投票和/或标记为回答…所以我的案子不是忽略这里的财产。我有多种方法。其中只有一个需要保持价值,其他人必须忽略。所以我添加了忽略属性。但是,现在我需要在映射中保留原始值。好的,这是内联映射,它只适用于那个特定的方法。你说我需要在地图上保留原始值是什么意思?