問題タブ [automapper-2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - オートマッパー構成の自動検出
MVCでコントローラーを作成する場合、追加の登録を行う必要はありません。エリアの追加についても同じことが言えます。global.asaxにAreaRegistration.RegisterAllAreas()呼び出しがある限り、追加の設定は必要ありません。
AutoMapperでは、ある種のCreateMap<TSource, TDestination>
呼び出しを使用してマッピングを登録する必要があります。これらは、staticを使用して明示的に行うMapper.CreateMap
か、クラスから派生しAutoMapper.Profile
、メソッドをオーバーライドして、そこからConfigure
呼び出すことで実行できCreateMap
ます。
Profile
から拡張するクラスのMVCスキャンのように、から拡張するクラスのアセンブリをスキャンできるはずだと私には思えますController
。このようなメカニズムでは、Profile
?から派生したクラスを作成するだけでマッピングを作成できるのではないでしょうか。そのようなライブラリツールは存在しますか、それともオートマッパーに組み込まれているものがありますか?
c# - AutoMapper マップ オブジェクトを任意の継承された宛先タイプにマップする
DTOクラスを用意しましょう:
ビューモデル クラス (ベース mvc プロジェクト ライブラリ):
今、次のようにオートマッパーのマッピングを作成すると:
メインの Web MVC プロジェクトでは、次のように UserViewModelBase の実装を作成しています。
今私がこれを呼び出すとき:
次のようなエラーで失敗します。
タイプ マップ構成が欠落しているか、サポートされていないマッピングです。
UserDto -> UserViewModel
これは、UserDto と UserViewModel の間の直接マッピングを定義していないことが原因であると理解しています。Mapper.CreateMap<UserDto, UserViewModelBase>();
AutoMapper に、このマップを使用して、 から継承する目的の型として任意の型を受け入れる必要があることを伝える方法があるかどうかを知りたいですUserViewModelBase
。
asp.net-mvc-3 - AutoMapViewResult は Jimmy Bogard によるダイエット ビデオにコントローラを置きます
私はこのビデオを数回見ましたが、ソース オブジェクトから宛先オブジェクトへのマッピングを処理する、彼が作成したカスタム ActionResult がとても気に入っています。私の問題は、多くの場合、ViewModel のコレクション プロパティがビューに DropDownList または Listbox として表示されますが、ソース オブジェクトでは使用できないことです。したがって、別のサービスを呼び出してソース オブジェクトのコレクションを取得し、これを VeiwModel のプロパティにマップします。
例:
Departments は Letter オブジェクトのプロパティではないため、DropDownList のオプションを取得するには、別のクエリを作成する必要があります。これには、ViewModel プロパティを設定するために、別の AutoMapper 呼び出しが必要です。
ジミーがこれに対するいくつかのアプローチを説明しているAutoMapperの Google グループを見つけました。
これに関するジミー・ボガードのコメント:
選択リストがどのように変化するかに応じて、これを行う方法がいくつかあります。項目のハード リストの場合、多くの場合、その背後に何らかのモデル (State や Country など) が存在するため、ビュー モデルにはその 1 つのタイプのみがあり、エディター テンプレートが実際に状態のリストを取得します。
パラメーターによって異なる場合は、実際の選択リストを渡し、基本的に Mapper.Map + マップ後の操作 (AutoMapper ではない) を実行して、部分を埋める必要があります。AutoMapper を使用して主要部分を埋め、詳細を他の要素で埋めます。
最後に、選択リスト プロバイダー タイプのアプローチのようなものをビューに含めることができます。
Html.InputFor(m => m.UserRoles, opt => opt.SelectListProvider());
HTH、
ジミー
EditorFor テンプレートは、DropDownList または ListBox を生成できるコレクションを照会するために正しいサービスを取得するために DependencyResolver を使用していると思います。そのコードが EditorFor テンプレートのサーバー側コード ブロックに属しているかどうかはわかりません。これについての何かが私には正しくないように思えますが、私は完全に間違っている可能性があります. 私は常に、データ アクセスの呼び出しはビューからではなく、アクションの本体で行われると感じていました。
彼の 2 番目と 3 番目の推奨事項が何を意味するのか、私にはよくわかりません。
誰かがこの問題を解決し、これに対するエレガントな解決策を持っていると信じなければなりません。任意の推奨事項やアイデアをいただければ幸いです。
c# - インターフェースを共有する2つの具象クラスをマッピングするAutoMapper
2つのオブジェクトを説明するインターフェースがあります。1つはDAOで、もう1つはBOです。だから、これはそれがどのように見えるかです:
そして、OrderDAOをOrderBOにマッピングしたいと思います。私の当初の考えは、次のように、インターフェイスをインターフェイスにマップし、両方の具象オブジェクトを提供するだけでよいというものでした。
ただし、これはそのままでは機能しませんでした。myOrderDAOからmyOrderBOにデータを取得するには、まだマップを作成する必要がありました。
それが私にとって意味があるかどうかはわかりませんし、いわば「間違ったことをしている」ように感じます。ですから、私の質問は2つあります。
- 上記のシナリオでマップするための最良の方法は何ですか?
- 同じインターフェイスのマップを作成する必要があるのはなぜですか?
よろしくお願いします。
c# - インターフェイスと具体的なマップを使用した AutoMapper マッピング
これは可能ではないと思いますが、質問する価値はあると思います。
インターフェイスを共有する次の型があります (これは以前に尋ねた質問とは異なります)。
次に、次のマッピングがあります。
さて、ここが興味深い/混乱するところです。
これは機能します:
これは機能しません:
通常、2 つのインターフェイス タイプが定義された最初の Map ステートメントを入力するだけでは問題はありませんが、Customer オブジェクトがどこかに埋もれている場合に問題が発生します。
ICustomer から CustomerSO へのマッピングがないため、これは機能しません。構成アサーションは失敗します。
現在、私はこれを行うことで問題を回避しています:
ただし、私たちが持っているすべての DTO タイプのオブジェクトに対してこれを行う必要があり、その後、カスケード効果が生じる可能性が非常に高くなります。
技術的には、問題を解決するために次のことを実行できることを理解しています。
ただし、CustomerBO には、インターフェイスではなく、ビジネス ロジックで使用される他の多くのプロパティがあります。同様に、インターフェイスではなく CustomerSO にも多くのプロパティがあります。上記のルートを使用すると、大量の Ignore() 呼び出しが発生し、CustomerBO を CustomerSO にマップし、CustomerSO を CustomerBO にマップする必要があり、それぞれに固有の Ignore 呼び出しのリストが含まれます。インターフェイスを使用すると、Ignore 呼び出しの必要がなくなります。一方から他方に表示したいデータはインターフェイスで定義されているためです。
要するに、私の質問は次のとおりです。実装クラスの 1 つに遭遇したときに、AutoMapper にインターフェイス マップを使用するように指示する方法はありますか? それに失敗した場合、必要に応じてインターフェイス間マッピングを強制するために、MapFrom デリゲートで Map を呼び出す以外の (より良い) 方法はありますか?
automapper - AutoMapperカスタムタイプコンバータが機能しない
Troy GoodeのPagedListを使用して、WebApiでページング情報を提供しています。彼のパッケージは、IEnumerableを実装するIPagedListを返しますが、IsLastPage、PageNumber、PageCountなどのカスタムプロパティも含みます。
WebApiコントローラーメソッド(GETなど)からこのクラスを返そうとすると、Enumerableはシリアル化されますが、カスタムプロパティはシリアル化されません。したがって、AutoMapperを使用して、次のようなクラスに変換するカスタム型コンバーターを作成すると思いました。
Enumerableを個別のプロパティに移動するので、シリアル化はそれを完全に処理します。それで、私は座って、次のようなカスタムタイプコンバーターを作成しました。
そして、次のように私の構成で設定します。
しかし、私がそれをこのように呼ぼうとすると:
このエラーが発生します:
タイプマップ設定が欠落しているか、マッピングがサポートされていません。
マッピングタイプ:IPagedList
1 -> PagedViewModel
1 PagedList.IPagedList1[[Provision.DomainObjects.Department, Provision.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> Provision.DomainObjects.PagedViewModel
1 [[Provision.DomainObjects.Department、Provision.DomainObjects、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null]]宛先パス:PagedViewModel`1
ソース値:PagedList.StaticPagedList`1 [Provision.DomainObjects.Department]
どうすればこれを機能させることができますか?
c# - 派生クラスのコレクションで AutoMapper が機能しない
派生クラスのコレクションを含むオブジェクトを操作しているときに、AutoMapper 2.1.267.0 で問題に直面しています。次のクラスを使用して、より単純なシナリオで問題を分離しました。
そしてこれらのマッピング
初期化はこちら
およびすべてを要約した図 (赤い矢印は AutoMapper マッピングを表します)
ContainerA インスタンスを ContainerB にマップしました。この最初のシナリオは正しく機能します。次の図に示すように、宛先オブジェクトは完全に塗りつぶされています。
しかし、このマッピングを追加すると
結果は
コレクションのすべての要素の「テキスト」プロパティが null になります。画像でわかるように、containerB.ClassB オブジェクトの "Text" プロパティはまだ正しくマップされています。これはコレクションでのみ発生します。何が起こっているのかわかりません。手がかりはありますか?
ありがとう
c# - AutoMapper: ソース オブジェクトが指定された型に対して null の場合、宛先オブジェクトのすべてのプロパティをデフォルトに設定する
指定されたクラスのソース オブジェクトが null の場合に、すべてのプロパティをデフォルト値に設定するように AutoMapper を構成することは可能ですか? Mapper.AllowNullDestinationValues = false;
アプリケーション内のすべてのクラスに必要なことを行うために使用する必要があることを知っています。ここに、テストに使用するサンプルコードがありますが、機能しません
このコードの使用:
asp.net-mvc - IEnumerable から IEnumerable に直接マップすると、AutoMapped の結果がおかしくなるのはなぜですか?
AutoMapper で奇妙な問題が発生しています。
私が次のことをしたら
これは完全に機能し、期待どおりの結果が得られます。
あるいは、次のようにモデルを生成するように変更した場合:
結果は異なり、結果の総数は同じですが、結果の多くは互いに重複しており、他の結果は欠落しています。私は何か間違ったことをしていますか?これは、それが機能するはずの方法ではありません。
automapper - xmlを使用して実行時にマップを動的に構築しますか?
オブジェクトのマップを定義する XML ファイルがあります。基本的には、マップするように指示されます。
実行時にこれを解析したいのですが(簡単です)、何らかの方法でこれのオートマッパーマップを初期化します..何度か試しましたが、これを行う方法がわかりません..ForMemberのオーバーロードはありますか行方不明ですか?これを行う他の方法はありますか?