C# 为什么自动映射转换失败?

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

在下面的automapper示例中,我必须处理一些不同类型的问题:

  • 目标类(
    P
    )的属性,这些类本身就是类(即
    PContact
    Bank
  • 列表(
    新建列表()
  • 包装类(
    wrapper
    wrapps
    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));
        }
   }