:AutoMapperを使用したアーキテクチャ?私は、次のフローを使用してASP.NET MVCアプリケーションを構築してい
コントローラ
- 実行アクション(モデルに対して動作FactoryClassからデータを取得する取得しますエンティティフレームワーク)
- コントローラのアクションにデータを戻す
- AutoMapperを使用して、ModelオブジェクトからModelViewオブジェクトに変換する
- リターンのModelViewオブジェクト強く型付けされたビュー
に更新エンティティ
- 入力としてのModelViewエンティティ(DefaultDataBinderが使用されます)
- 検証のModelViewエンティティ
- とファイル名を指定して実行アクション右のファクトリメソッドに直接ModelViewオブジェクトを送ります。
- ModelViewオブジェクトにidがあるかどうかチェックし、そうであればModelオブジェクトをデータベースから取得します。
- AutoMapperを使用して、着信するModelViewオブジェクトをModelオブジェクト/エンティティに変換します。その更新の場合は、フェッチされたModelオブジェクトを宛先として使用します。
- 更新を使用する場合Refresh Client.Wins elseを使用します。追加
- SaveChangesを実行し、コントロールに戻ります。
問題1
のModelViewクラスは、(それがedetingオブジェクトとリストの両方を含めることができます)のcontrolerアクションが接続されているビューのために作られた特別なものです。異なるビューを持ついくつかのアクションは、同じModelViewクラスを使用するため、ModelViewオブジェクトのすべてのオブジェクトがすべてのアクション/ビューで使用されるわけではありません。
限り、ビューを更新することができModelViewObjectsのすべてのプロパティを使用しても問題ないけど...
は、この、我々はModelViewObjectのプロパティの一部が使用されていないビューを得たことを言いますModelViewObjectは、(対応するModelObjectが(db/entityフレームワークから)フェッチされ、AutoMapperでModelViewObjectとマージされる)ファクトリに送信されます(更新されます)。ここで問題となるのは、設定されていない(ビューで使用されていない)ModelViewObjectのプロパティは、ModelObjectの実データを上書きすることになります。
これを解決するには、通常、AutoMapper ForMember Ignor()を使用しますが、これは完全なModelViewObject(すべてのプロパティセット)がdbを更新するときに問題になります。
これはどのように処理しますか? AutoMapperの設定が異なる工場で異なる更新方法がありますか?
私は次のようなメソッドしか持つことができませんでした:UpdateMyEnityt(MyEntityエンティティ)とこのmethidはoch add MyEntityオブジェクトを更新します。私はAutoMapperマッピングを置くべき
問題2
?今のところ私はアップデートをに、をに入れました。私はModelViewObjectにModelViewObject.ToDataModelのようなマッピングを配置することを考えましたが、完全な変換(somプロパティは無視される)が必要ない場合は、このAutoMapperをどこかで実行する必要があります。
これはどのように処理しますか?
問題3
はあなたがのModelView(エンティティフレームワークオブジェクト)にModelViewObjectを翻訳したSOM ignorsでAutoMapperを使用し、当社のファクトリクラスで作業updateメソッドを持っていると言います。このテーブルに対応するModelViewObjectを処理するビューを実行するが、新しいプロパティを処理しないビューを実行すると、プロパティが常にnull/stringに設定されることを意味するので、データベーステーブルを新しいフィールド/ propertieで更新するとします。空/ 0。ファクトリで定期的な更新メソッドを実行するとき、このプロパティに無視されません。これは、ゼロ値が実際の値を上書きすることを意味します。
このような更新が行われる大きなリスクと、古いコードでこれを処理することを覚えていない大きなリスクです。
どうすれば対応できますか?
問題4 AutoMapperは私がmaby検証他のいくつかの方法でこれを置く必要があり、今私は、マッピングが行われているこれらの検証を持っています、マッピングが可能になるかどうかをチェックすることができます検証メソッドを持っていますアプリケーションが起動するのと同じ速さで実行されますか?機能を使用するときは、マッピングのその他の問題が最初に表示されます。
BestRegards
それのMVC世話しましょう - 段落をまとめた検討 - これはQ&フォーラムですが、エッセイライティングではありません。 :) – RPM1984
Yhea私は知っているが、私はそれをより短く保つために問題を抱えている。 – Banshee