【问题标题】:AutoMapper DynamicMap with DataReader against an interfaceAutoMapper DynamicMap 与 DataReader 针对一个接口
【发布时间】:2013-11-21 16:11:52
【问题描述】:

我对 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; }
}

【问题讨论】:

    标签: c# unity-container automapper


    【解决方案1】:

    AutoMapper 的创建者 Jimmy Bogard 在另一个论坛中回复:

    数据读取器映射器不支持接口,只支持具体类。这是因为数据读取器映射器是使用反射实现的。发射速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 2017-04-07
      相关资源
      最近更新 更多