問題タブ [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.
c# - AutoMapperとネストされた配列のフラット化
AutoMapperを使用して複数レベルの配列をフラット化しようとしています。
次のソースクラスを検討してください。
そして次の目的地:
私ができるようにしたいのは、1つ以上のXからリストを取得することです。例:
これを実現するために使用するマッピング構成の種類がわかりません。MapFromは、1:1の構成を行う方法のように見えますが、AutoMapperの宛先命名規則を使用しない限り、配列(または他の列挙可能なもの)を処理できないようです。
これを達成する方法についての洞察はありますか?
c# - これはAutoMapper2.0.0と2.2.0の間の重大な変更ですか?
今日、AutoMapper 2.0.0から2.2.0にアップデートしましたが、アップデートによってコードが壊れていることに気づきました。automapper githubサイトに問題として投稿する前に、ここでそれについて質問したかった。
私の宛先タイプの1つは、次のようにコレクションプロパティを初期化します。
automapper 2.0.0では、これは問題ありませんでした。2.2.0にアップデートしたとき、この宛先タイプにマッピングすると、「コレクションは固定サイズでした」というメッセージとともにNotSupportedExceptionが発生しました。(その例外はAutoMapperMappingException内にラップされていました。)
上記のコンストラクターコードを次のように変更することで、問題を修正できました。
AutoMapper 2.0.0はItemsプロパティにある値をすべて破棄し、set
プロパティアクセサーを使用しているように見えますが、AutoMapper 2.2.0はget
プロパティアクセサーを使用して、既存のIEnumerableを変更しようとしています。Enumerable.Empty<TModel>()
例外を説明する長さゼロの配列を置き換えているように見えます。
これはバグですか?AutoMapperで2.0.0と2.2.0の間で何が変更され、宛先プロパティセッターを無視し、代わりに既存のコレクションを変更しようとしますか?
アップデート:
要求に応じて、CreateMap呼び出しは次のとおりです。
クラスはPageOfEstablishmentApiModel
から継承しPageOf<EstablishmentApiModel>
ます。
Mapper.Mapコードは次のとおりです。
AutoMapperで2.0.0から2.2.0に移行する際に特別なマッピング構成(たとえば、.ConvertUsing(x => x))が必要な場合は、古いバージョンを使用しなければならない場合があります。AMがコレクションのプロパティを自動的に変換する方法が好きでした。それがないと、AMはValueInjecterのように見えます。
automapper - AutoMapperMappingExceptionマッピングタイプ:Double-> Double
アプリケーションでMapper.Mapを呼び出そうとすると、次の例外が発生します。
同じタイプ(およびそのプリミティブ型)のオブジェクトをマップできないことを示すエラーによる明らかなフラストレーションを除けば、「Acme.Order」タイプから「Acme.Address」タイプにマップすることは決してありません。
使用されている実際の呼び出しは次のとおりです。
私のオブジェクトモデルは次のようになります。
また、アプリケーションで次の構成を定義しています。
これらのヘルパーメソッドを使用すると:
(IDataRecordには、フィールド名を取得し、序数を取得し、標準メソッドを使用して値を返す拡張メソッドがありますが、簡潔にするために表示しません。)
これのいずれかが失敗の原因に光を当てていますか?
(ところで、私はAutoMapper v2.1.267を使用しています)
asp.net-mvc - Automapper で適切にマッピングするには?
Nuget の Automapper、Unit Of Work、Entity Framework 5、ASPNET MVC 4、WebApi、および Windsor Castle を使用するアプリケーションに取り組んでいます。
これをマッピングする必要があるのか 、それとも Automapper によって自動的にマッピングされる必要があるのか わかりません
Uow.Stores.GetAll().OrderBy(s => s.Name)
を返しますIOrderedQueryable<Store>
。
エラー メッセージが表示される
式の型 IOrderedQueryable を型 IEnumerable に変換できません
foreach を実行して、返されGetAll
た各オブジェクトを Automapper のメソッドにStoreDto
変換する必要がありますか? Mapper.Map
Automapper はそれを変換してくれませんか?
これが、Automapper の使用方法と登録方法です。何か改善すべき/できることがあれば教えてください。
AutomapperInstaller.cs
:
WebWindsorInstaller
:
Store.cs
:
StoreDto.cs
(今までのストアと同じ)
そして、これは私がインストーラーを呼び出す方法ですIocConfig.cs
:
私はそこに含めるべきかどうかわからない
automapper - ValueInjectorまたはAutomapperを使用しているときに、「Target」オブジェクトの値が「Source」オブジェクトのnullによって上書きされないようにするにはどうすればよいですか?ネストされたマッピングの問題?
私の問題
ビューに存在しない同じクラスの「ソース」オブジェクトプロパティは、「ターゲット」オブジェクトの同じプロパティをnullで上書きしています。これを防ぐにはどうすればよいですか?影響を受けるのは、入力された(nullではない)プロパティのみが「ターゲット」オブジェクトにマージされるようにする方法です。Automapperでもこれを試しましたが失敗しましたが、代わりにAutomapperソリューションを使用できれば幸いです。
この「ヌルマッピング」の質問が以前に出てきたことはありがたいですが、ネストされたオブジェクトがあるため、私の状況がより複雑になるのではないかと心配しています。提案されたオプションを試してみましたが、機能させることができませんでした。だからここにいます。
助けてくれてありがとう。
これは複雑な問題であり、特に誰かが私のためにコードサンプルを作成できる場合は、これに関する支援に本当に感謝しています。私は数日間これの上に髪を引っ張っています:(
私が試みたこと
2つのオブジェクトがあります。1つはoriginal( "Target")で、もう1つ( "Source")はフォーム(ビュー)によって入力されます。
元の「ターゲット」オブジェクト(myOrigDoc)は次のようになります。
フォームの「ソース」オブジェクト(myDoc)は次のようになります。
次に、マッピングを行います。
次のインジェクターを使用します。
そして私は最終的に:
フォームには「DateOfBirth」フィールドがないため、次を呼び出すと、モデルバインディングが新しい「MyDoc」オブジェクトの「DataOfBirth」プロパティにnull値を作成していると思われます。
どうもありがとう、エド。
編集1:これはサブクラスによるネストされたマッピングの問題だと思います。ValueInjectorでこれをどのようにソートするかわかりません。
EDIT2 :ネストされたマッピングのドキュメントから可能なオートマッパーソリューションですが、動作させることができませんでした。私はまだ自分のヌルをターゲットに渡しています。
automapper-2 - ソースプロパティから宛先にマップするにはどうすればよいですか?
以前にやったことは誓いますが、今はうまくいかないようです。基本的に、EndUser
を含むものを取得していて、それをオブジェクトSite
にマップしたいと思います。Site
SiteInfo
これが私のマップ構成です:
したがってEndUser.Site
、にマップできるはずSiteInfo
です。を呼び出すだけで、外部でこれを行うことができますMapper.Map<SiteInfo>(EndUser.Site)
。エンドユーザーから位置情報に直接マッピングする方が、よりクリーンな構文だと思います。
EndUser
では、どうすればからに直接マップできSiteInfo
ますか?基本的に、これは私が書きたいコードです。
EndUser.Site
現在、次のようにマッピングするだけで問題を回避しています。
asp.net-web-api - 2 つの異なるコレクション型に対してマッピングするときに AutoMapper が例外をスローする
オブジェクト マッピングに AutoMapper を使用する ASP.NET Web API サービスを作成しています。私は AbleCommerce ショッピング カート ソフトウェアに対してこのサービスを構築しています。問題のサービス (宛先) クラスは、ユーザーとそのアドレスを追跡します。
私のソースは、AbleCommerce パッケージのUser
およびクラスです。Address
ジェネリック制約の使用に問題がある可能性があると思われるため、先祖クラスのクラス宣言を含めましたが、完全にはわかりません。
AbleCommerce クラスからサービス クラスへのマッピングは期待どおりに機能します。マッピング構成で不要なプロパティを無視する限り、サービス クラスから AbleCommerce クラスへのマッピングは機能します。AddressCollection
ただし、Addresses プロパティの場合、(AutoMapper の観点から) AbleCommerceUser
クラスの とList<AddressModel>
サービスのクラスの の違いを解決する方法がわかりませんUserModel
。
マッピング構成をテストすると、次の例外が発生します。
AddressModel
クラスには という名前のプロパティがないため、これは混乱を招きますAddresses
。私は明らかに何かが欠けています。提案、アドバイス、または説明をいただければ幸いです。
c# - Automapper を介していくつかのシーケンスをメインの ViewModel に自動投影します
Automapper を使用して SQL サーバーからいくつかのデータをビュー モデルに自動投影しようとしています。
私が持っているビューモデルは次のとおりです。
そして、私が使用しようとしているコードは次のとおりです。
2 つのプロパティId
とは、クラスName
内で同じ名前を持っているため、自動投影されます。Workstation
このようないくつかのコードラインで発生する例外
いくつかの奇妙なobject reference is null
例外であり、スタック トレースの上部にいくつかのオートマッパーのCreateExpression<>
メソッドがあり、オートマッパーがそれを SQL コードに変換するための適切な式を生成できないという結論が得られます。
.Name
SQL テーブルから.Category.Name
の 1 項目検索などの単純なマップを使用すると、完全に機能します。必要なのは、Automapper を介してシーケンスを投影しながら、複数のアイテムにアクセスすることだけです。
c# - AutoMapper-継承マッピングが機能しない、同じソース、複数の宛先
AutoMapper(v2.2)で、ソースタイプは同じで宛先タイプが異なるマップに継承マッピングを使用できますか?
私にはこの基本的な状況があります(実際のクラスにはさらに多くのプロパティがあります):
ViewModelA
とViewModelB
は同じエンティティクラスの異なる表現です。
BaseViewModel
次のように、ViewModelごとに同じマッピングを再利用したいと思います。
しかし、残念ながら、これは機能していないようです。次のような呼び出し:
マッピングされますmodel
がPropertyA
、マッピングされませんCommonProperty
。https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritanceの例に正しく従っていると思いますが、同じソースタイプで複数のマップを作成すると、AutoMapperが作動しなくなるのではないかと思います。
洞察はありますか?基本クラスのマッピングをグループ化するというアイデアは気に入っていますが、これはうまくいかないようです。
asp.net-mvc-3 - リスト間のマッピングを作成する方法と文字列?
このようなモデルとViewModelがありますが、AutoMapperはMyViewModelからMyModelに値を渡しません!
MyModel:
MyViewModel:
ブーストラッパー:
マッピングを正しく機能させるにはどうすればよいですか?