C# 自动映射异常

C# 自动映射异常,c#,automapper,C#,Automapper,以下映射代码导致automapper在映射完成时引发异常 mapper.CreateMap<SqlDataReader, CodeModel>() .ForMember(dest => dest.Code, options => options.MapFrom(src => src["code"] != null ?

以下映射代码导致automapper在映射完成时引发异常

mapper.CreateMap<SqlDataReader, CodeModel>()
      .ForMember(dest => dest.Code, 
                 options => options.MapFrom(src => src["code"] != null ? 
                                                   src["code"].ToString() :
                                                   string.Empty));
mapper.CreateMap()
.FormMember(目标=>目标代码,
options=>options.MapFrom(src=>src[“code”]!=null?
src[“code”].ToString():
string.Empty);
这真的很奇怪,
src[“code”]
有一个值,它是
“E”
,这甚至在automapper消息中都有说明

有人知道这个问题是什么或者如何解决这个问题吗

堆栈跟踪:

[NullReferenceException:对象引用未设置为 对象]AutoMapper.Mappers.typemapper.Map(ResolutionContext 上下文,IMappingEngineRunner映射器)+116
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext 上下文)+459

[自动映射异常:

映射类型:String->String System.String->System.String

目标路径:CodeModel.Code

源值:E]
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext 上下文)+537
AutoMapper.Mappers.DataReaderMapper.MapPropertyValue(ResolutionContext 上下文、IMappingEngineRunner映射器、对象映射对象、属性映射 属性映射)+305
AutoMapper.Mappers.DataReaderMapper.MapPropertyValue(ResolutionContext 上下文,IMappingEngineRunner映射器,对象结果)+210
AutoMapper.Mappers.DataReaderMapper.Map(ResolutionContext上下文, IMappingEngineRunner映射器)+639
AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext 上下文)+477 AutoMapper.MappingEngine.Map(对象源,类型 sourceType,Type destinationType,Action
1 opts)+176
AutoMapper.MappingEngine.Map(对象源,操作
1选项)+162
AutoMapper.MappingEngine.Map(对象源)+143


尝试使用
ResolveUsing
方法,而不是使用
MapFrom
方法,但在您的情况下,这两种方法都应按预期工作。尝试查看是否存在任何配置问题

  mapper.CreateMap<SqlDataReader, CodeModel>()
          .ForMember(dest => dest.Code, 
                     options => options.ResolveUsing(src => src["code"] != null ? 
                                                       src["code"].ToString() :
                                                       string.Empty));
mapper.CreateMap()
.FormMember(目标=>目标代码,
选项=>options.ResolveUsing(src=>src[“code”]!=null?
src[“code”].ToString():
string.Empty);
我已经用SqlReaderMock创建了一个工作示例。我假设您的SqlReader执行上下文是好的

//Arrange
var configStore = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.AllMappers());
configStore.CreateMap<SqlDataReaderMock, Destination>()
    .ForMember(dest => dest.Name, opt => opt.ResolveUsing(src => src["tyto"] != null
                                                                        ? src["tyto"].ToString()
                                                                        : String.Empty));
var _mappingEngine = new MappingEngine(configStore);

//Act
var result = _mappingEngine.Map<Destination>(new SqlDataReaderMock());

//Assert
Assert.AreEqual("otyt", result.Name);


class Destination
{
    public string Name { get; set; }
}


class SqlDataReaderMock
{
    public string this[string value]
    {
        get
        {
            return new string(value
                                    .ToCharArray()
                                    .Reverse()
                                    .ToArray());
        }
    }
}
//排列
var configStore=new ConfigurationStore(new TypeMapFactory(),MapperRegistry.AllMappers());
configStore.CreateMap()
.FormMember(dest=>dest.Name,opt=>opt.ResolveUsing(src=>src[“tyto”]!=null
?src[“tyto”].ToString()
:String.Empty);
var _mappingEngine=新的mappingEngine(configStore);
//表演
var result=_mappingEngine.Map(新的SqlDataReaderMock());
//断言
aresequal(“otyt”,result.Name);
班级目的地
{
公共字符串名称{get;set;}
}
类SqlDataReaderMock
{
公共字符串此[字符串值]
{
得到
{
返回新字符串(值)
.ToCharArray()
.Reverse()
.ToArray());
}
}
}

然后请检查AutoMapper配置好吗?基本上没有配置。。。我们必须在不使用automapper的情况下解决这个问题!!