これは重複した質問として表示される可能性があります。はい、私の質問に既に回答しているかもしれないの質問を確認しましたが、回答が見つかりませんでした。Automapper v5.1.1 - Circular references
他のほとんどの質問に関連するように、私の問題はお互いを参照するモデルに関連しています。私は子供のための別々のDTOオブジェクトを作成するために私のコードをリファクタリングするような、私が続けることができる他のアプローチをよく知っています。問題は、モデルとリファクタリングのかなりの割り当てが非常に煩わしいことです。
私は次のように述べてAutomapper v5.0 Upgrade Guide、読み:
私が試してみた - 例えばClientModel
:
var clientModelMap = CreateMap<Client, ClientModel>()
.ForMember(dest => dest.Id, source => source.MapFrom(x => x.ClientId))
.ForMember(dest => dest.InvoicePayments, source => source.Ignore());
clientModelMap.MaxDepth(1);
clientModelMap.PreserveReferences();
などProject
モデルで:
var projectModelMap = CreateMap<Project, ProjectModel>()
.ForMember(dest => dest.Client, source => source.Ignore())
.ForMember(dest => dest.Id, source => source.MapFrom(x => x.ProjectId))
.ForMember(dest => dest.ClientName, source => source.MapFrom(x => x.Client.ClientName))
.ForMember(dest => dest.ClientTariff, source => source.MapFrom(x => x.Client.Tariff))
;
projectModelMap.MaxDepth(1);
projectModelMap.PreserveReferences();
次のように構造は次のとおりです。
- クライアント
- プロジェクト(各クライアントは、多くのプロジェクトを持っている)
- リソース(各プロジェクトは、プロジェクトマネージャーを持っている)
- プロジェクトが(関連付けられています彼/彼女が取り組んでいる1つ以上のプロジェクト)
- クライアント(クライアントに関連付けられている/ sのマネージャー)
- リソース(各プロジェクトは、プロジェクトマネージャーを持っている)
- プロジェクト(各クライアントは、多くのプロジェクトを持っている)
しかし、これは効果がありません、と私はまだStackOverflowException
を受けます。何が欠けているのか、間違っているのですか?
これは方法がない場合、私は提案のために開いています。
多くの感謝!
[MVCE](http://stackoverflow.com/help/mcve)をセットアップできますか? – stuartd
@stuartd - 応答に感謝します。私は実際に私の問題を発見した。 v5.0ガイドで提供されているコード例は正しく機能します。私はそれをモデル階層でさらに実装しませんでした。 –
'MaxDepth(x)'の理解を深めるために、基本的に次のように述べています。マップされる指定されたモデルのマッピングプロファイルを入力するたびに、maxに達しているかどうかがチェックされます。したがって 'Client'が' Project'と 'User'を参照するのが好きなら、それを2に設定します。これは正しいですか? –