在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>()我们如何表达这一点呢?
发布于 2021-08-09 16:58:27
好了,我发现这个问题也想这么做。如果我没记错的话,你有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中重复,所以我这样做是为了重用之前的映射。让我知道你的想法,如果它对你有效。
https://stackoverflow.com/questions/68664720
复制相似问题