【问题标题】:Create AutoMapper mapping with calculated value?使用计算值创建 AutoMapper 映射?
【发布时间】:2017-01-15 12:04:05
【问题描述】:

我正在尝试配置从实体框架实体到视图模型对象的简单 AutoMapper 映射。它主要工作,但在视图模型中我有一个 int 字段来保存计数。源实体中不存在此字段。

cfg.CreateMap<Feed, FeedVM>()
   .ForMember(dest => dest.Count, opt => opt.MapFrom(src => src.Orders.Count()));

当我检查映射的有效性时,我收到以下错误消息:

无法映射 Feed 上的以下属性:

添加自定义映射表达式、忽略、添加自定义解析器或修改目标类型 Feed。 语境: 从类型 FeedVM 到 Feed 的映射

如果我正确理解 Automapper 语法,我将从 Feed 映射到 FeedVM,但错误消息似乎表明我正在从 FeedVM 映射到 Feed。

我应该怎么做才能将值 42 映射到 FeedVM 中的 Count 字段?

【问题讨论】:

  • 投票结束此问题,因为在已接受答案的 cmets 中,OP 意识到发生的错误与问题中的错误不同。

标签: c# automapper


【解决方案1】:

你应该使用ResolveUsing:

cfg.CreateMap<Feed, FeedVM>()
   .ForMember(dest => dest.Count, opt => opt.ResolveUsing(src => src.Orders.Count()));
更新

John 在下面的评论中指出映射是正确的,问题在于与Feed 相关的另一个实体的映射。在那个实体中,他正在映射两个方向。

【讨论】:

  • 为了让我的示例保持简单,我可能过于简化了。而不是“42”,我正在做一个 Linq 查询来提取相关对象的计数。我相应地修改了代码示例。 UseValue 仍然是正确的选择吗?
  • 啊,我没有你的源代码可以试用,你能用ResolveUsing代替MapFrom吗? :.ForMember(dest =&gt; dest.Count, opt =&gt; opt.ResolveUsing(src =&gt; src.Orders.Count()));
  • 这会引发相同的验证错误。我会看看是否可以引入更多代码以帮助使其更清晰。
  • 经过进一步测试,我相信映射是正确的。问题在于与 Feed 相关的另一个实体的映射。在那个实体中,我正在映射两个方向。
猜你喜欢
  • 2017-03-13
  • 1970-01-01
  • 2019-02-14
  • 2017-05-19
  • 1970-01-01
  • 2017-06-03
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多