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



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

在这个例子中,存在从a到B的映射,也存在从B到C的映射。因此,从a到C的映射可以使用上述两种方法创建:将它们组合起来,或者使用第一个方法映射到B类型的对象,然后使用第二个方法映射到最终映射,通过路径:a ->B→c .

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

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>()

我们怎么表达呢?

好吧,我发现这个问题也试图做同样的事情。如果我没弄错的话,你有A->B和B->C,你想要A->C。

要做到这一点,我所做的是创建这两个映射然后我使用ConvertUsing这样:

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中重复,所以我这样做是为了重用以前的映射。让我知道你的想法,如果它适合你。

相关内容

  • 没有找到相关文章

最新更新