关于 Automapper 的快速新手问题。
我有以下代码:
CreateMap<MyDataContract, MyViewModel>()
.MapFrom(s => s.Trans, d => d.Trans);
Run Code Online (Sandbox Code Playgroud)
在 DataContract MyDataContract 中,我有以下内容:
[DataMember]
public IEnumerable<ReferTypeDataContract> Refer { get; set;}
Run Code Online (Sandbox Code Playgroud)
我试图找出 Automapper 如何将其从上述 CreateMap 映射到 ReferTypeDataContract。是否有任何可视化工具来检查这一点,或者可以添加一些调试代码以使其可见。
我问的原因是我有一个不同的映射来映射 MyDataContract,但是我得到了一组不同的引用列表结果,无法弄清楚。
Automapper 可以将其执行计划可视化,如文档:了解您的映射中所述。
这意味着您可以获得任何源-目标对的表达式树。例如:
var configuration = new MapperConfiguration(cfg => {/* your mappings */});
LambdaExpression executionPlan = configuration.BuildExecutionPlan(typeof(Foo), typeof(Bar));
Run Code Online (Sandbox Code Playgroud)
文档提供使用此VS 扩展来可视化树。如果它不起作用,让我们使用内置的文本可视化工具。从这样的源类开始:
public class Foo
{
public int Id { get; set; }
public List<FooInner> Inners { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
创建地图配置Foo -> Bar,FooInner -> BarInner。在BuildExecutionPlan调用方法后设置断点并executionPlan在 Quick Watch ( 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
};
Run Code Online (Sandbox Code Playgroud)
所以它详细描述了Foo属性是如何映射的。