System.StackOverflowException
以前は AutoMapper 4 で動作していた AutoMapper 5 で何かをマップしようとすると、問題が発生します。
少しグーグルで調べたところ、循環参照が原因であることがわかりました。
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)
したところ、再び機能するようになりました。
ただし、実際の問題と、行を追加して何をしたかはわかりません:)
私の質問:
- Category/CategoryDto に関する「循環参照」とは何ですか?
- 正確には何
.MaxDepth()
ですか?サンプルで 3 が使用されているのはなぜですか? - 何
.PreserveReferences()
のためですか?