gpt4 book ai didi

c# - 带有 DataReader 的 AutoMapper DynamicMap 针对接口(interface)

转载 作者:行者123 更新时间:2023-11-30 16:14:53 27 4
gpt4 key购买 nike

我对 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com