簡體   English   中英

Automapper,我們可以看到它如何映射對象?

[英]Automapper, can we see how it maps objects?

關於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列表得到了一組不同的結果,並且無法解決這個問題。

Automapper可以按照文檔中的描述可視化其執行計划: 了解您的映射

這意味着您可以獲取任何源 - 目標對的表達式樹。 例如:

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

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

文檔提供使用此VS擴展來可視化樹。 如果它不起作用,讓我們使用內置的文本可視化工具。 從這樣的源類開始:

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

創建一個地圖配置Foo -> BarFooInner -> BarInner 調用BuildExecutionPlan方法后設置斷點,並在Quick Watch( Shift+F9 )中檢查executionPlan 然后轉到DebugView屬性並選擇Text visualizer arrow以在新窗口中打開它。 通常,您會收到大量帶有以下語句的文本:

$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屬性的映射方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM