2016-11-17 35 views
2

我有一個System.StackOverflowException試圖映射在AutoMapper 5東西,與AutoMapper 4.遷移到AutoMapper 5 - 循環引用

曾任職谷歌上搜索了一下四周,我發現,它引起Circular references後時。

的AutoMapper文件說:

此前,AutoMapper可以通過保持 跟蹤什麼被映射處理循環引用,並在每一個映射,檢查本地 哈希表源/目標對象,看是否物品已映射到 。事實證明,這種跟蹤非常昂貴,你需要 選擇使用PreserveReferences來使圓形地圖起作用。 或者,您可以配置MAXDEPTH:

// Self-referential mapping 
cfg.CreateMap<Category, CategoryDto>().MaxDepth(3); 

// Circular references between users and groups 
cfg.CreateMap<User, UserDto>().PreserveReferences(); 

因此,我增加.MaxDepth(3)我的代碼,它現在再次工作。

但是我不undertand真正的問題是什麼,我做什麼,通過將行:)

我的問題:

  • 什麼手段在分類/ CategoryDto的問候「循環引用」?
  • .MaxDepth()究竟是什麼?爲什麼在樣本中使用3?
  • 什麼是.PreserveReferences()

回答

3

PreserveReferences將使地圖表現得像AutoMapper4因爲你是用來。它會使AutoMapper跟蹤映射的內容並防止它導致溢出。

另一種選擇是設置你希望AutoMapper遍歷的深度。使用設定的深度,它會將自我參照模型映射到指定的次數。

循環引用將是一個類,如:

public class Category 
{ 
    public int Id {get;set;} 
    public Category Child {get;set;} 
    public string Value {get;set;} 
} 

類引用本身,財產Child意味着你可以嵌套此對象多次。

+0

我將深度設置爲1.仍堆棧溢出......!感覺現在配置正在聽我們... –