+-

这是映射器的代码:
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集合的问题 - 乐贴网