1

我正在使用 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 中的错误吗?在 NUnit 中?两个都?

我不应该将 AutoMapper 用于 IDataReader 映射吗?

提前致谢。

4

1 回答 1

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 解决了这个问题。

对不起,误导性问题:)

于 2014-07-16T17:01:57.680 回答