我对 AutoMapper 比较陌生,但发现它非常强大,可以将 WCF 服务中的对象转换为 DTO(有点意思)。
今天我遇到了一个我认为应该可行但失败的情况。我在大多数地方都针对接口(interface)进行编程,我的很多映射(有效)实际上将 EF 实体映射到我的 DTO 接口(interface)(即 Mapper.CreateMap();)。
但是我遇到了一个情况,我有一个数据表,我想使用 AutoMapper 来转换它。我很快找到了一些看起来很有希望的样本,但它们总是以相对模糊的异常失败(至少对我而言)。
作为测试,我更改了 DynamicMap 调用以使用 DTO 的具体实现并且它成功运行。我最初没有走这条路,因为我之前针对由我的 IoC 容器 (Unity 3.x) 解析的接口(interface)创建的所有映射都有效。
有没有办法让这个特定的 map 使用接口(interface)工作,或者在做返回集合的动态 map 时我必须使用具体类?
失败:
AutoMapper.Mapper.DynamicMap<IDataReader, IEnumerable<IPunctuationMapDto>>(table.CreateDataReader());
工作:
AutoMapper.Mapper.DynamicMap<IDataReader, IEnumerable<PunctuationMapDto>>(table.CreateDataReader());
PunctuationMapperDto:
[DataContract]
public class PunctuationMapDto : IPunctuationMapDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string TaggedValue { get; set; }
[DataMember]
public int UntaggedValue { get; set; }
}
IPunctuationMapDto:
public interface IPunctuationMapDto
{
int Id { get; set; }
string TaggedValue { get; set; }
int UntaggedValue { get; set; }
}
最佳答案
Jimmy Bogard,AutoMapper 创建者在另一个论坛中回复:
数据读取器映射器不支持接口(interface),只支持具体类。这是因为数据读取器映射器是使用 reflection.emit 实现的以提高速度。
关于c# - 带有 DataReader 的 AutoMapper DynamicMap 针对接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126125/