C# 自动映射异常
以下映射代码导致automapper在映射完成时引发异常C# 自动映射异常,c#,automapper,C#,Automapper,以下映射代码导致automapper在映射完成时引发异常 mapper.CreateMap<SqlDataReader, CodeModel>() .ForMember(dest => dest.Code, options => options.MapFrom(src => src["code"] != null ?
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映射器)+116AutoMapper.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选项)+162AutoMapper.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的情况下解决这个问题!!