我使用AutoMapper从IDataReader映射到简单的DTO。
我在使用ForMember时能够映射属性,但在使用ConstructUsing / ConvertUsing时则不能。在这种情况下,我的所有NUnit测试都失败,因为AutoMapper返回一个带有null属性的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"]
};
}
在NUnit中甚至没有调用MyTestMethod。
这是AutoMapper中的错误吗?在NUnit?既?
我不应该使用AutoMapper进行IDataReader映射吗?
提前致谢。
答案 0 :(得分:0)
在我偶然发现这个问题之后, https://groups.google.com/forum/#!topic/automapper-users/3DcPbP-GgNg
我发现这与NUnit / MsTest无关,只是由于AutoMapper.Net4.DLL在我的项目中而引起的。
此DLL包含DataReaderMapper,它覆盖了我的自定义IDataReader映射。 由于我的实际项目列与对象的属性名称不匹配,因此DataReaderMapper只返回null。
(至于NUnit / MsTest,我有不同的项目,并且没有怀疑其中一个的额外DLL。在缩小问题后我能够在两个框架上重现它。)
从我的项目中删除AutoMapper.Net4.DLL解决了这个问题。
对于误导性问题抱歉:)