Automapper,我们可以看到它如何映射对象?

问题描述 投票:3回答:1

关于Automapper的快速新手问题。

我有以下代码:

CreateMap<MyDataContract, MyViewModel>()
    .MapFrom(s => s.Trans, d => d.Trans);

在DataContract,MyDataContract中,我有以下内容:

[DataMember]
public IEnumerable<ReferTypeDataContract> Refer { get; set;} 

我试图找出Automapper如何将这个从上面的CreateMap映射到ReferTypeDataContract。是否有任何可视化工具来检查这一点,或者可以添加一些调试代码以使其可见。

我问的原因是,我有一个映射MyDataContract的不同映射,但是我为Refer列表得到了一组不同的结果,并且无法解决这个问题。

c# automapper
1个回答
3
投票

Automapper可以按照文档:Understanding your mapping中的描述可视化其执行计划。

这意味着您可以获取任何源 - 目标对的表达式树。例如:

var configuration = new MapperConfiguration(cfg => {/* your mappings */});

LambdaExpression executionPlan = configuration.BuildExecutionPlan(typeof(Foo), typeof(Bar));

文档提供使用此VS extention可视化树。如果它不起作用,让我们使用内置的文本可视化工具。从这样的源类开始:

public class Foo
{
    public int Id { get; set; }
    public List<FooInner> Inners { get; set; }
}

创建一个地图配置Foo -> BarFooInner -> BarInner。调用BuildExecutionPlan方法后设置断点并在Quick Watch(executionPlan)中检查Shift+F9。然后转到DebugView属性并选择Text visualizer箭头在新窗口中打开它。通常,您会收到大量带有以下语句的文本:

$resolvedValue = .If (
    False || $src == null
) {
    .Default(System.Collections.Generic.List`1[XUnitTests.FooInner])
} .Else {
    $src.Inners
};

$passedDestination = .If ($dest == null) {
    .Default(System.Collections.Generic.List`1[XUnitTests.BarInner])
} .Else {
    $typeMapDestination.Inners
};  

因此,它详细描述了Foo属性是如何映射的。

© www.soinside.com 2019 - 2024. All rights reserved.