3

新しいオブジェクトを作成するのではなく、 Automapper 5.1.1を使用して既存のオブジェクトを更新する方法はありますか?

たとえば、CustomerエンティティとCustomerViewModel. Customer既存の をCustomerViewModelフィールド値で更新したいと考えています。

よろしくお願いいたします。

4

1 に答える 1

2

Automapper を使用してモデルをエンティティにマッピングすることはお勧めしません。依存関係または情報は、賢明に使用しないと上書きされる可能性があります。ただし、必要に応じて使用するには、モデルからエンティティへのマップを作成してから呼び出すだけです

Mapper.Map(myModel, myEntity);

エンティティへのマッピングの問題

NHibernate や EF などの ORM を使用していると思います。エンティティはプロキシであり、参照もプロキシです。ここで、ASP.NET MVC プロジェクトがあり、Entity を ViewModel にマップするとします。ビューにモデルをフォームとして表示しますが、ViewModel に設定されているすべてではなく、ビューに必要なプロパティのみを表示します。その後、ユーザーはフォームをあなたに送り返し、コントローラーはビューモデルを返しますが、ビューは表示されたものしか認識していないため、今回はすべてのプロパティが設定されているわけではありません。ViewModel をエンティティにマップし直すと、初期化されたすべてのプロパティが既定の状態になり、エンティティからの有効なデータが上書きされます。

もう 1 つの問題は、AutoMapper が Reflections を使用してプロパティを設定することです。通常、ORM が存在する権利は、DomainLayer を簡単に実装できる可能性です。DomainLayer には、エンティティ自体にいくつかの検証、計算があります。プロパティがリフレクションで設定されている場合、ビジネス ロジックは無視され、検証も計算も実行されません。

だから私のアドバイスは、エンティティにマップしないでください;)

于 2016-10-17T09:08:13.063 に答える