我对AutoMapper相对较新,但发现它在将WCF服务中的对象转换为DTO时非常强大(有点重要)。
今天我遇到了一个我认为应该工作但却失败的情况。我在大多数地方编程接口,很多我的地图(可以工作)实际上将EF实体映射到我的DTO接口(即Mapper.CreateMap();)。
但是我遇到了一个我有数据表的情况,我想用AutoMapper来转换它。我很快发现了一些看起来很有希望的样本,但是他们仍然以相对模糊的异常(至少对我来说)失败了。
作为测试,我更改了DynamicMap调用以使用DTO的具体实现,并且它成功运行。我最初没有采用这种方式,因为我之前创建的所有映射都是针对由我的IoC容器(Unity 3.x)解析的接口工作的。
有没有办法让这个特定的地图使用界面工作,还是在做返回集合的动态地图时我必须使用具体的类?
出现故障:
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; }
}
答案 0 :(得分:3)
AutoMapper创建者Jimmy Bogard在另一个论坛回复:
数据读取器映射器不支持接口,只支持具体类。这是因为数据读取器映射器是使用reflection.emit实现的。