1. 程式人生 > 其它 >[非專業翻譯] Mapster - 物件引用

[非專業翻譯] Mapster - 物件引用

[非專業翻譯] Mapster - 物件引用

系列介紹

[非專業翻譯] 是對沒有中文文件進行翻譯的系列部落格,文章由機翻和譯者自己理解構成,和原文相比有所有不同,但意思基本一致。

因個人能力有限,如有謬誤之處還請指正,多多包涵。

正文

本文將說明 Mapster 如何配置物件引用

防止迴圈引用

當對映型別存在迴圈引用時,會導致 Mapster 試圖遞迴對映迴圈引用並丟擲 stackoverflow 異常。

如果想要對映迴圈引用或保留引用(例如指向同一個物件的兩個屬性),可以使用 PreserveReference 方法並將引數設定為 true 來實現這個需求:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .PreserveReference(true);

注意! Mapster 配置的是型別到型別,而不是每個層次結構,所以在使用時需要顯示配置所有型別.

注意!PreserveReference 不支援對 ProjectTo EF IQueryable 的對映 !

對映深度 —— MaxDepth

對於遞迴對映,可以嘗試使用 MaxDepth 方法指定對映深度,將在到達指定對映深度時停止對映。並且 MaxDepth 支援對 IQueryable 的對映。

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .MaxDepth(3);

注意!

  • MaxDepth
    對映深度最小應該為 1,深度為1將對映物件本身成員,不繼續對映巢狀物件的成員。
  • MaxDepth 未限制最大深度,但不應該將深度設定太大,因為每增加一級深度就會生成一個對映邏輯,若深度過大會導致大量的記憶體佔用。

淺拷貝

Mapster 預設會遞迴對映巢狀物件。可以通過 ShallowCopyForSameType 方法將引數設定為true來進行淺拷貝:

TypeAdapterConfig<TSource, TDestination>
    .NewConfig()
    .ShallowCopyForSameType(true);

大物件對映

為了優化效能,Mapster 會嘗試內聯類對映。如果對映的模型很複雜,那麼這個過程將花費很多時間。

可以通過呼叫 AvoidInlineMapping 方法跳過內聯過程:

TypeAdapterConfig.GlobalSettings.Default
    .AvoidInlineMapping(true);
目前學習.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程
如果您認為這篇文章還不錯或者有所收穫,您可以點選右下角的【推薦】支援,或請我喝杯咖啡【讚賞】,這將是我繼續寫作,分享的最大動力!
作者:玩雙截棍的熊貓 宣告:原創部落格!請在轉載時在文章開頭註明本人部落格地址。如發現錯誤,歡迎批評指正。凡是轉載於本人的文章,不能設定打賞功能,如有特殊需求請與本人聯絡!