我正在使用AutoMapper从IDataReader映射到一个简单的DTO。
当我使用ForMember时,我能够映射属性,但当我使用ConstructUsing/ConvertUsing时却不能。在这种情况下,我所有的NUnit测试都失败了,因为AutoMapper返回一个带有空属性的DTO。有趣的是,这种行为在MSTest中不会发生:当在MSTest下运行测试时,映射工作。
代码如下:
public class Dto
{
public string Name { get; set; }
public string Value { get; set; }
}
在NUnit和MSTest中传递:
Mapper.CreateMap<IDataReader, Dto>()
.ForMember(x => x.Name, map => map.MapFrom(reader => reader["Name"]))
.ForMember(x => x.Value, map => map.MapFrom(reader => reader["Value"]));
只在MSTest中传递,并在NUnit中返回null属性的Dto:
Mapper.CreateMap<IDataReader, Dto>()
.ConvertUsing(Map); // ConstructUsing doesn't work either
private Dto Map(IDataReader reader)
{
return new Dto
{
Name = (string)reader["Name"],
Value = (string)reader["Value"]
};
}
MyTestMethod在NUnit中甚至没有被调用。
这是AutoMapper的一个bug吗?在NUnit吗?都有?
我不应该使用AutoMapper为IDataReader映射吗?
在我偶然发现这个问题之后,https://groups.google.com/forum/!主题/automapper-users/3 dcpbp-ggng
我发现这与NUnit/MsTest无关,只是由于AutoMapper.Net4.DLL在我的项目中引起的。
这个DLL包含DataReaderMapper,它覆盖了我的自定义IDataReader映射。由于我的实际项目列与对象的属性名称不匹配,DataReaderMapper简单地返回null。
(至于NUnit/MsTest,我有不同的项目,没有怀疑其中一个额外的DLL。在缩小问题范围后,我能够在两个框架上重现它。
从我的项目中删除AutoMapper.Net4.DLL解决了问题。
抱歉,这个问题误导了你:)