[英]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 -> Bar
, FooInner -> 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.