方法&#39; GetEnumerator&#39;在类型Proxy <ienumerable>中没有实现

时间:2016-09-10 20:03:27

标签: automapper

使用AutoMapper时出现以下错误

  

方法&#39; GetEnumerator&#39;在类型&#39;代理&#39;来自汇编&#39; AutoMapper.Proxies,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = be96cd2c38ef1005&#39;没有实施。

在我的存储库中,我有一个私有方法

private IMapper GetMapper()
{
    var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<MyClass, PersistenceModels.MyClass>();
        cfg.CreateMap<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>();
    });

    return new Mapper(config);
}

然后我用这个如下

var mapper = GetMapper();
var userInfo = mapper.Map<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>(userInfoRaw);

MyClass类型相同且具有IEnumerable属性

public IEnumerable<string> ImageUris { get; set; }

任何想法如何解决这个问题?

修改

我不是接口定义的映射类型,我正在映射具体类型的集合,因此是IEnumerable接口。

5 个答案:

答案 0 :(得分:16)

解决方案是在创建地图时不使用IEnumerable,仅在使用地图时。

所以,在配置中我改变了

cfg.CreateMap<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>();

cfg.CreateMap<PersistenceModels.MyClass, MyClass>();

一切正常。

答案 1 :(得分:7)

我遇到了同样的问题。我想AutoMapper希望被告知IEnumerable的哪个实现用于目标,所以以下内容对我有用。

cfg.CreateMap<IEnumerable<PersistenceModels.MyClass>, List<MyClass>>();
                                                      ^^^^

答案 2 :(得分:1)

这是较旧的,但如果您从Google来到这里可能有帮助...

假设:

cfg.CreateMap<PersistenceModels.MyClass, MyClass>();

你需要IEnumerable你的目的地:

var perData = dbContext.SomeDbSet.Where(.....);
var mapData = Mapper.Map<IEnumerable<MyClass>>(perData);

答案 3 :(得分:1)

使用IList时发生相同的问题。因此,请从IEnumerable或IList切换到目标类型中的列表。应该可以。

答案 4 :(得分:0)

这是不必要的:  mapper.Map<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>(userInfoRaw); 您必须只使用map类型(不包含集合):

mapper.Map<PersistenceModels.MyClass, MyClass>(userInfoRaw);