C# 自动映射禁用IgnoreMap属性一次
我的目标实体中有一个具有IgnoreMap属性的属性 我只想禁用一次。我使用automapperlist来列出映射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
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。我还添加了更好的解决方案。请查收。如果你相信这个答案是有用的,请考虑将投票和/或标记为回答…所以我的案子不是忽略这里的财产。我有多种方法。其中只有一个需要保持价值,其他人必须忽略。所以我添加了忽略属性。但是,现在我需要在映射中保留原始值。好的,这是内联映射,它只适用于那个特定的方法。你说我需要在地图上保留原始值是什么意思?