【问题标题】:Use default mappings with AutoMapper使用 AutoMapper 的默认映射
【发布时间】:2012-10-03 10:30:27
【问题描述】:

我正在使用AutoMapper 将一组Models 映射到ViewModels。一切正常,但我必须为我创建的每个模型/视图模型一遍又一遍地做一件事。我必须将某个属性从(例如)String 映射到 Int

所以我的映射现在看起来像这样:

Mapper.CreateMap<ModelOne, ModelOneViewModel>()
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty)));

Mapper.CreateMap<ModelOneViewModel, ModelOne>()
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToInt32(t.SomeProperty)));

Mapper.CreateMap<ModelTwo, ModelTwoViewModel>()
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty)));

// ... etc

有没有办法告诉 automapper 当它从我的Models 类映射到我的ViewModels 类时,它应该始终将SomeProperty 映射到String

反之亦然,当它从ViewModels 映射回Models 时,是否可以告诉automapper 始终将属性SomeProperty 映射回Int32

【问题讨论】:

  • 要清楚,您希望转换基于ModelOne 的属性名称(或视图模型反之亦然)?那应该是ModelOne.SomeProperty 还是任何名称为SomeProperty 的属性?
  • @wal ModelXXX 和 ModelXXXViewModel 具有相同的属性名称。它总是被称为SomeProperty。在ModelXXX 中,它始终是Int32,在ModelXXXViewModel 中,它始终是String。 -- 所以当我从ModelXXX 映射到 ModelXXXViewModel 时,它应该映射 SomePropertyInt32String。 - 当我 map 从 ModelXXXViewModel to ModelXXX 时,它应该始终将 SomePropertyString 转换为 Int32
  • @w00 Custom Type Converters 不是你要找的吗?
  • 根据医生链接,是否可以接受添加一般转换(不仅仅是针对该属性)?例如:Mapper.CreateMap&lt;string, int&gt;().ConvertUsing(Convert.ToInt32);
  • @Trustme-I'maDoctor 我认为这可能很有用。我实际上是在尝试将byte[] 转换为string(转换为base64),反之亦然。一个string (base64) 回到byte[]。出于某种原因,我的 Convert 方法还没有被触发。但是我认为当我开始工作时它可以解决我的问题。您能否将其添加为答案(以及额外信息,如果您有的话),以便稍后在没有其他答案时接受。

标签: c# automapper


【解决方案1】:

根据您的评论请求,Custom Type Converters 可能会在您的情况下派上用场。

我目前没有任何其他信息,幸好提到的文章看起来像 解释得很好。

【讨论】:

  • 谢谢,我解决了我之前遇到的问题。它已经像魅力一样起作用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多