gpt4 book ai didi

c# - AutoMapper 问题和映射 IEnumerable 集合

转载 作者:行者123 更新时间:2023-11-30 15:47:21 25 4
gpt4 key购买 nike

这是映射器的代码:

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,然后一切正常。

关于c# - AutoMapper 问题和映射 IEnumerable 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638911/

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