C# 为什么自动映射转换失败?
在下面的automapper示例中,我必须处理一些不同类型的问题:C# 为什么自动映射转换失败?,c#,.net,automapper,C#,.net,Automapper,在下面的automapper示例中,我必须处理一些不同类型的问题: 目标类(P)的属性,这些类本身就是类(即PContact,Bank) 列表(新建列表()) 包装类(wrapperwrappsIDataRecord) 怎么了 我想将IDataRecord的实例转换为类p的实例 AutoMapper.Mapper.CreateMap<IDataRecord, P>() .ConvertUsing(x => AutoMapper.Mapper.Map<Wrapp
- 目标类(
)的属性,这些类本身就是类(即P
,PContact
)Bank
- 列表(
)新建列表()
- 包装类(
wrappswrapper
)IDataRecord
IDataRecord
的实例转换为类p
的实例
AutoMapper.Mapper.CreateMap<IDataRecord, P>()
.ConvertUsing(x => AutoMapper.Mapper.Map<Wrapper, P>(new Wrapper(x)));
AutoMapper.Mapper.CreateMap<Wrapper, P>()
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.GetString("Nome")))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.GetString("Cognome")))
.ForMember(dest => dest.Banks,
opt => opt.ResolveUsing(src => AutoMapper.Mapper.Map<Wrapper, List<Bank>>(src)));
AutoMapper.Mapper.CreateMap<Wrapper, PContact>()
.ForMember(dest => dest.StreetAddress, opt => opt.MapFrom(src => src.GetString("Indirizzo")))
.ForMember(dest => dest.Town, opt => opt.MapFrom(src => src.GetString("Città")))
.ForMember(dest => dest.Phone, opt => opt.MapFrom(src => src.GetString("Telefono")))
AutoMapper.Mapper.CreateMap<Wrapper, List<Bank>>()
.ConvertUsing(x => new List<Bank>() { AutoMapper.Mapper.Map<Wrapper, Bank>(x) });
AutoMapper.Mapper.CreateMap<Wrapper, Bank>()
.ForMember(dest => dest.AccountNumber, opt => opt.MapFrom(src => src.GetString("NumCC")))
.ForMember(dest => dest.IBAN, opt => opt.MapFrom(src => src.GetString("IBAN")));
AutoMapper.Mapper.CreateMap()
.ConvertUsing(x=>AutoMapper.Mapper.Map(新包装器(x)));
AutoMapper.Mapper.CreateMap()
.FormMember(dest=>dest.FirstName,opt=>opt.MapFrom(src=>src.GetString(“Nome”))
.ForMember(dest=>dest.LastName,opt=>opt.MapFrom(src=>src.GetString(“Cognome”))
.FormMember(目标=>目标银行,
opt=>opt.resolvesusing(src=>AutoMapper.Mapper.Map(src));
AutoMapper.Mapper.CreateMap()
.FormMember(dest=>dest.StreetAddress,opt=>opt.MapFrom(src=>src.GetString(“Indirizzo”))
.ForMember(dest=>dest.Town,opt=>opt.MapFrom(src=>src.GetString(“Cittá”))
.ForMember(dest=>dest.Phone,opt=>opt.MapFrom(src=>src.GetString(“Telefono”))
AutoMapper.Mapper.CreateMap()
.ConvertUsing(x=>newlist(){AutoMapper.Mapper.Map(x)});
AutoMapper.Mapper.CreateMap()
.ForMember(dest=>dest.AccountNumber,opt=>opt.MapFrom(src=>src.GetString(“NumCC”))
.ForMember(dest=>dest.IBAN,opt=>opt.MapFrom(src=>src.GetString(“IBAN”));
问题与AutoMapper拥有自己的IDataReader映射器有关,因此需要执行以下操作
public class AutomapperTypeAdapterFactory
:ITypeAdapterFactory
{
public AutomapperTypeAdapterFactory()
{
//scan all assemblies finding Automapper Profile
var profiles = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.BaseType == typeof(Profile));
Mapper.Initialize(cfg =>
{
foreach (var item in profiles)
{
if (item.FullName != "AutoMapper.SelfProfiler`2")
cfg.AddProfile(Activator.CreateInstance(item) as Profile);
}
});
//===>>
MapperRegistry.Mappers.Remove(MapperRegistry.Mappers.FirstOrDefault(x => x is DataReaderMapper));
}
}