2017-02-07 9 views
1

DTOをエンティティにマップしようとしています。私がオンラインでそれを検索したとき、私はAutoMapperへの参照がたくさんあることに気付きました。エンティティへのDTOのマッピング

はまた、私は「新しい」情報源はありませんどのように文句一つの質問は4歳、新しく付けのソースを見つけることができませんでした。

本当に有望に見えた私が見つけた源の1つは、この https://rogerjohansson.blog/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and-entityframework-is-horrible/

だったし、それがいずれかの作業を取得私はcouldntの。

だから、基本的にはこのような状況です。

私は、WCFを使用して注文に関する統合をやろうとしています。私が注文DTOと関連のDTOのを持っている(全体の別のケース)

はオーダーライン、顧客、customeraddress、orderadressです。後で続きます。

これらは基本的にデータベース・テーブルなので、メインの「表では、」注文です。ヘッダー、オーダーラインなどの役割を果たします。誰もがこのような何かに出くわしたと確信しています。

私は対応するエンティティに従ってDtoを作成しました。

私が言いたいことは、

a)に変換する(または用語が行くように、マップ?)これらのDTOのエンティティ

Bには)dbcontextとのSaveChangesするエンティティを追加します。

だから、誰もがこのような状況を解決するには良い方向に私を指すことができますか?

答えて

0

私たちはあなたと同様のプロジェクトがあります。 WCFの代わりに、MVCのModelクラスを使用しますが、最終的に同じアイディアです:あるオブジェクトから別のオブジェクトに変換することです。私はAutoMapperについてもっと同意できない。最初は、その効率について同じ疑問がありましたが、ついにそれを試してみることにしました。次に、記事で指摘した問題のいくつか(特に要素のコレクション)に直面しました。幸いなことに、AutoMapperは特別なマッピング条件を処理するのに十分な柔軟性を提供します。我々は参照のために

  • を削除する/要素を更新するために、新しい要素/要素を持っているとき、私たちは、検出できるようカスタムマッピングを使用するコレクションの場合

    • 、我々は、Entity Frameworkのの規則に従います。むしろFK_Id値を追加します実際のオブジェクトよりも。
    • 何らかの理由で、あなたは(私たちはdependencyResolverのアイデアを好きではないとして、唯一の極端な場合には)我々はdependencyResolverを使用し、いくつかの参照エンティティに基づいて、マッピングにいくつかのロジックを追加する必要があり、場合

    私はAutoMapperが基本を学ぶのに十分簡単だと思うので、数分であなたのオブジェクトをマッピングすることができます。さらに、特別な考慮事項のためのすべてのツールを提供します。

    あなたが投稿記事には、「Entity FrameworkのはAutoMapperを好きではない」が、あなたはEFとAutoMapperのルールに従う方法についての複数の関連する方法について説明します。 Entity Frameworkは巨大なORMなので、いくつかのルール(場合によっては非常に厳しいルール)に従う必要があります。もちろん、基本的な例でAutoMapperを使用するといくつかのルールが破られますが、使い慣れたらルールに従うのは簡単です。

    まとめ:AutoMapperを使用すると、いくつかの設定をカスタマイズするために多くの時間を節約できます。そうでない場合は、linq投影を使用する必要があります。これは、ほとんどの場合、より多くの時間を要します。たとえば、コレクションの問題は、カスタムマッパーを使ってAutoMapperで処理できるIdに基づいて追加/編集/削除を検出することで解決されます。

  • 関連する問題