+-
的AutoMapper和映射IEnumerable集合的问题
这是映射器的代码:

public IEnumerable<GetQuestionsContract> Map(IEnumerable<XmlNode> nodes, XmlNamespaceManager namespaceManager)
    {
        Mapper.CreateMap<XmlNode, GetQuestionsContract>()
            .ForMember(
                dest => dest.Id, 
                options =>
                options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
                    source => source.SelectSingleNode("//wfauth60xsd:questionID", namespaceManager)))
            .ForMember(
                dest => dest.Question, 
                options =>
                options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
                    source => source.SelectSingleNode("//wfauth60xsd:question", namespaceManager)));

        return Mapper.Map<IEnumerable<XmlNode>, List<GetQuestionsContract>>(nodes);
    }

尽管此方法有效,但它似乎似乎仅多次返回IEnumerable列表中的第一个元素(与它们在XmlNodeList中的项一样多).

更新:我简化了代码并更新了标题.如果我映射到一个XmlNode,该方案就可以正常工作,但是枚举似乎是一个问题.例如,以下代码可以正常工作:

public SomeIdContract Map(XmlDocument document, XmlNamespaceManager namespaceManager)
    {
        Mapper.CreateMap<XmlDocument, SomeIdContract>()
            .ForMember(
                dest => dest.Id, 
                options =>
                options.ResolveUsing<XmlNodeResolver<string>>().FromMember(
                    source => source.SelectSingleNode("//wfauth60msgs:someID", namespaceManager)));

        return Mapper.Map<XmlDocument, SomeIdContract>(document);
    }

有什么想法吗?谢谢!

最佳答案
我有同样的问题.事实证明,在缓存源时,AutoMapper使用我的模型对象的Id(Guid)属性(通常由nhiberate私下设置)作为标识符(无论其他属性如何).在测试期间,我从未设置过id,因此所有对象的默认GUID都是相同的,这说明了为什么只对IEnumerable返回了第一项.因此,我必须对测试公开ID,为每个项目设置ID,然后一切正常.
点击查看更多相关文章

转载注明原文:的AutoMapper和映射IEnumerable集合的问题 - 乐贴网