【问题标题】:Automapper: Individual Member Mapping Shared Across Multiple Object Maps?Automapper:跨多个对象映射共享的单个成员映射?
【发布时间】:2017-05-17 23:43:18
【问题描述】:

我有许多对象都具有 CreatedDt 属性。这些对象中的每一个都需要映射到具有 Created_dt 属性的匹配 DTO。

使用 AutoMapper,我如何设置通用配置以将 CreatedDt 映射到 Created_dt(反之亦然),而无需为每个地图手动执行?

【问题讨论】:

  • This 可能会为您指明正确的方向,但我认为这将比解决的问题多 100 倍。

标签: c# asp.net .net automapper


【解决方案1】:

有很多方法可以达到这个效果:

Naming conventions,例如:this

class Program
{
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<A, ADto>();
            cfg.AddMemberConfiguration()
                .AddName<ReplaceName>(_ => _.AddReplace(nameof(A.CreateDate), nameof(ADto.Created_dt)));
        });

        var mapper = config.CreateMapper();

        var a = new A { CreateDate = DateTime.UtcNow, X = "X" };
        var aDto = mapper.Map<ADto>(a);
    }
}

public class A
{
    public DateTime CreateDate { get; set; }

    public string X { get; set; }
}

public class ADto
{
    public DateTime Created_dt { get; set; }
    public string X { get; set; }
}

属性(在具有 CreatedDt 属性的基类中添加此属性):

 public class Foo
 {
     [MapTo("Created_dt")]
     public int CreatedDt { get; set; }
 }

默认映射配置(AutoMapper Defaults)。

【讨论】:

  • 谢谢@Pawel。您认为您可以提供上述选项一或三的示例吗?
  • 我已经添加了示例,如何通过使用 ReplaceName 约定来实现类似的目标。我已经检查了您的案例,AutoMapper 默认应该能够从 Pascal 案例映射到 Snake 案例,并且不需要额外的配置。
  • 我看到了奇怪的行为。默认情况下,automapper 会自动从 CreatedDt 转到 Created_dt,但无法正确地从 Created_dt 转到 CreatedDt。我不确定为什么会这样。感谢您提供示例。
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2020-01-29
  • 1970-01-01
  • 2021-04-28
  • 2019-06-23
  • 1970-01-01
相关资源
最近更新 更多