c# - Automapper,我们可以看看它是如何映射对象的吗?

标签 c# automapper

关于 Automapper 的快速新手问题。

我有以下代码:

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

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

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

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

我问的原因是,我有一个映射 MyDataContract 的不同映射,但是我得到了一组不同的引用列表结果,无法弄清楚。

最佳答案

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; }
}

创建 map 配置Foo -> BarFooInner -> BarInner。在 BuildExecutionPlan 方法被调用后设置一个断点,并在 Quick Watch (Shift+F9) 中检查 executionPlan。然后转到 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属性是如何映射的。

关于c# - Automapper,我们可以看看它是如何映射对象的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43760133/

相关文章:

c# - jQuery 和 ASP.NET 从数据库下载文件

c# - 确保方法返回值不被库丢弃

c# - 尝试使用 Entity Framework 修复错误的数据库设计,特别是外键数据注释

c# - WPF 中来自 Silverlight 的 DoubleTap 事件

memory-leaks - 为什么 Automapper 使用这么多内存?

c# - 将值解析为可为空的枚举

c# - 具有依赖注入(inject)的 AutoMapper 不映射配置文件?

c# - ICollection 类型成员的 AutoMapper 上出现 "Error mapping types"错误

.net - Automapper AfterMap 函数初始化类

entity-framework - 如何使用 Automapper 来映射导航属性 View 模型