首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用链接映射/传递映射/链映射的AutoMapper映射

使用链接映射/传递映射/链映射的AutoMapper映射
EN

Stack Overflow用户
提问于 2021-08-05 10:16:42
回答 1查看 216关注 0票数 0

在C# dotnet中,如何使用AutoMapper创建使用链式映射的映射/使用其他映射到中间类型的映射?

在该示例中,存在从类型A到类型B的映射,也存在从B到C的映射。因此,可以使用上述两个映射创建从A到C的映射:组合它们或使用第一个映射到类型B的对象,然后使用第二个映射作为最终映射,通过路径:A -> B -> C。

在更复杂的场景中,可能会有多个路径,因此需要指定一个路径,但如何指定呢?

代码语言:javascript
复制
public class A
{
    public string TestA { get; set; }
}

public class B
{
    public string TestB { get; set; }
}

public class C
{
    public string TestC { get; set; }
}

this.CreateMap<A, B>()
.ForMember(dst => dst.TestB, opts => opts.MapFrom(src => src.TestA));
this.CreateMap<B, C>()
.ForMember(dst => dst.TestC, opts => opts.MapFrom(src => src.TestB));

this.CreateMap<A, C>();// A -> B -> C
// something like .UsingMap<A, B>().ThenUsingMap<B, C>()

我们如何表达这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2021-08-09 16:58:27

好了,我发现这个问题也想这么做。如果我没记错的话,你有A->B和B->C,你想要A->C。

为此,我创建了这两个映射,然后像这样使用ConvertUsing

代码语言:javascript
复制
CreateMap<A, B>();

CreateMap<B, C>();

CreateMap<A, C>()
  .ConvertUsing((entity, c, context) =>
    {
      var intermediate = context.Mapper.Map<B>(entity);
      return context.Mapper.Map<C>(intermediate);
    });

这对我来说很管用。我不知道你正在寻找的是更复杂还是有不同的需求/结果,但对我来说,这是一个非常简单的映射,但第一个映射(A->B)有遗留逻辑,我不想在B->C中重复,所以我这样做是为了重用之前的映射。让我知道你的想法,如果它对你有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68664720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档