C# 自动映射9:映射子属性
对于Automapper 7,我使用以下代码映射子属性:C# 自动映射9:映射子属性,c#,asp.net-core,automapper,C#,Asp.net Core,Automapper,对于Automapper 7,我使用以下代码映射子属性: Mapper.CreateMap<DomainClass, Child>(); Mapper.CreateMap<DomainClass, Parent>() .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id)) .ForMember(d => d.A, opt => opt.MapFrom(s
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child,
opt => opt.MapFrom(s => Mapper.Map<DomainClass, Child>(s)))
然后我使用_mapper对象而不是静态映射器
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child,
opt => opt.MapFrom(s => _mapper.Map<DomainClass, Child>(s)))
Mapper.CreateMap();
Mapper.CreateMap()
.ForMember(d=>d.Id,opt=>opt.MapFrom(s=>s.Id))
.ForMember(d=>d.A,opt=>opt.MapFrom(s=>s.A))
.FormMember(d=>d.Child,
opt=>opt.MapFrom(s=>u mapper.Map(s)))
但它不起作用。子属性始终为空。
我做错了什么?你可以试试这样的东西
static Mapper InitializeAutomapper()
{
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<DomainClass, Child>();
});
var mapper = new Mapper(config);
return mapper;
}
var mapper = InitializeAutomapper();
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child,
opt => opt.MapFrom(s => mapper.Map<DomainClass, Child>(s)))
staticmapper InitializeAutomapper()
{
var config=new-MapperConfiguration(cfg=>{
CreateMap();
});
变量映射器=新映射器(配置);
返回映射器;
}
var mapper=InitializeAutomapper();
CreateMap();
Mapper.CreateMap()
.ForMember(d=>d.Id,opt=>opt.MapFrom(s=>s.Id))
.ForMember(d=>d.A,opt=>opt.MapFrom(s=>s.A))
.FormMember(d=>d.Child,
opt=>opt.MapFrom(s=>mapper.Map(s)))
ForMember(d=>d.Child,opt=>opt.MapFrom(s=>s)
我试过了,但是Child属性总是空的。重新编译会有帮助。做一个我们可以执行并看到失败的测试。更新的代码中的Mapper
是什么?您在其中同时引用了它和\u Mapper
。停止使用静态API并转到
static Mapper InitializeAutomapper()
{
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<DomainClass, Child>();
});
var mapper = new Mapper(config);
return mapper;
}
var mapper = InitializeAutomapper();
Mapper.CreateMap<DomainClass, Child>();
Mapper.CreateMap<DomainClass, Parent>()
.ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(d => d.A, opt => opt.MapFrom(s => s.A))
.ForMember(d => d.Child,
opt => opt.MapFrom(s => mapper.Map<DomainClass, Child>(s)))