2016-10-15 9 views
1

オートマチック5.1.1を使用して、新しいオブジェクトを作成するのではなく、既存のオブジェクトを更新できますか?新しいオブジェクトを作成するのではなく、既存のオブジェクトを更新するオートマッハ

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

が大幅にご協力をお願い申し上げます。

答えて

1

あなたのエンティティにモデルをマップするためにAutomapperを使用するadvicedされていません。賢明に使用されないと、依存関係や情報を上書きすることができます。 しかし、問題をあなたが望むようにそれを使用し、あなただけのエンティティへのあなたのモデルからマップを作成する必要があり、その後、エンティティに

Mapper.Map(myModel, myEntity); 

マッピングを呼び出すための

私はあなたのようなORMを使用して推測しますNHibernateまたはEFの場合、Entitesはプロキシであり、参照もプロキシです。ここで、ASP.NET MVCプロジェクトがあり、エンティティをViewModelにマッピングしているとします。モデルをビューとしてフォームに表示しますが、ViewModelに設定されているものだけでなく、ビューに必要なプロパティのみを表示します。その後、ユーザーがフォームを送り返すと、コントローラーはViewModelを取得しますが、今回は表示されているビューのみが表示されているため、すべてのプロパティーが設定されていません。 ViewModelをエンティティに戻してマッピングすると、すべてのユニット化されたプロパティがデフォルト状態になり、エンティティの有効なデータが上書きされます。

もう一つの問題は、AutoMapperプロパティを設定するには、反射を使用していること、です。通常、ORMに存在する権利は、DomainLayerを簡単に実装する可能性があります。 DomainLayerには、Entity自体のValidations、Calculation ...があります。 Reflectionで設定されたプロパティがビジネスロジックを無視し、検証なしの場合、計算...が実行されます。

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

+0

ご回答ありがとうございます。依存関係/情報には注意が必要です。何が失われる可能性がありますか?フィールド値を一方から他方にコピーするだけです。再度、感謝します。 – user2981411

+0

喜んで助けることができました;)私は答えを編集して少し明るくしました。 – Rabban

+0

洞察に感謝します。エンティティに転送されなければならないものは何でもViewModelには、すなわち - - 最初の問題は、私は両方を初期化し、初期化されていないように、ViewModelにを使いたい理由、正確ではありませんが、何も。 2番目の問題は、検証ロジックとデータ注釈などをViewModelに適用すると、Entityに適用されたのと同じ動作をします。実際には、IValidatableObjectインターフェイスとデータ注釈をView Modelに適用しています。 – user2981411

関連する問題