問題タブ [automapper-5]
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.
automapper - ネストされたオブジェクトをマップする方法
Automapper で次のマッピングを設定しています
ContactRegisterViewModel を SecurityAccess に変換しようとしています。変換は部分的に機能します。SecurityAccess モデルにある Address プロパティ フィールドを含む、SecurityAccess に入力された関連プロパティを取得できますが、ContactRegisterViewModel プロパティ CompanyName を Address.Company.Name のプロパティにさらにマップしようとすると、私は打たれます。
オブジェクトツリー全体をどのようにマッピングできるか提案はありますか?.
c# - AutoMapper の新しい IValueResolver を使用するには?
IValueResolver
新しいバージョンの AutoMapper で新しいインターフェイスを使用する方法がわかりません。おそらく、以前のバージョンの AutoMapper では不適切に使用していたのでしょう...
多くのモデル クラスがあり、そのうちのいくつかは、sqlmetal を使用して複数のデータベース サーバー上の複数のデータベースから生成されます。
これらのクラスの一部にはPublicationCode
、サブスクリプション、オファー、請求書、またはそれが何であれ、どのパブリケーションに属しているかを識別する文字列プロパティ があります。
パブリケーションは 2 つのシステム (古いシステムと新しいシステム) のいずれかに存在する可能性があるため、目的のモデル クラスには、パブリケーションが古いシステムにあるか新しいシステムにあるかを示す bool プロパティがあります。
古いバージョン (<5?) の AutoMapper を使用しValueResolver<string, bool>
てPublicationCode
、 を入力パラメーターとして受け取りbool
、出版物の場所 (古いシステムまたは新しいシステム) を示す を返しました。
AutoMapper の新しいバージョン (5+?) では、これができなくなったようです。新しい IValueResolver には、私が持っているソース モデルと宛先モデルのすべての組み合わせの一意の実装がsrc.PublicationCode
必要dst.IsInNewSystem
です。
値リゾルバーを間違った方法で使用しようとしているだけですか? より良い方法はありますか?リゾルバーを使用したい主な理由は、サービスをコンストラクターに注入しDependencyResolver
、コードでなどを使用する必要がないことです (私は Autofac を使用しています)。
現在、次の方法で使用しています。
これは、PublicationCode プロパティを含む、私が持っているいくつかのデータ モデル クラスの 1 つです)。この特定のクラスは、次のビュー モデルにマップされます。
これら 2 つのクラスのマッピング定義は (式は IProfileExpression です)、関連のないマッピングは削除されています。
そしてリゾルバ:
そしてマッパーの使用:
automapper - AutoMapper 5 の異なるマッピング間で ValueResolver を再利用する方法は?
AutoMapper を 5.0.2 にアップグレードしようとしましたが、問題が発生しました。
移行ドキュメントによると、値リゾルバーは宛先オブジェクトにアクセスできるようになりました。
ソース/宛先モデルへのアクセスを許可するように、値リゾルバーの署名が変更されました。
これにより、各値リゾルバーが正確に 1 つの宛先タイプに関連付けられるという結果になります。
ただし、一部の値リゾルバーは複数の宛先タイプに使用されます。たとえば、DTO のすべての ID プロパティのマッピング中に使用されるリゾルバーがあります。リゾルバーは、リゾルバーに挿入されたサービスを使用して ID を変更します。
AutoMapper 5 で再利用可能な値リゾルバーをどのように定義すれば、まったく同じ実装で各宛先タイプに専用のリゾルバーを作成する必要がなくなりますか?
注: 値を直接操作する代わりに値リゾルバーを使用する主な理由は、依存性注入です。この回答によると、値リゾルバーは、マッピング中に依存関係が注入されたサービスを使用する最良の方法です。
.net - Automapper を使用してダイナミックからプロパティをコピーする
JSON から動的に構築されている動的オブジェクト (実際には、JSON.NET の JObject) があります。そのプロパティを既存のオブジェクトにコピーしたいと考えています。動的オブジェクトのプロパティは、ターゲット オブジェクトの型に存在する必要があります。存在しない場合は、エラーが発生してもかまいません。これについては、最新バージョンの Automapper を検討しています。JObject から適切な型へのマップを作成しようとしましたが、JObject のプロパティが内部ディクショナリに格納されているため、うまくいかないと思います。これはまったく可能ですか?
c# - double からのマッピング
Automapper 5.0.2.0 を使用して、TypeA から TypeB にマップしようとしています。
長さはインチ単位で格納されていると仮定し、次のマッピング プロファイルを作成しました。
そして私はそれを次のように使用します:
ただし、最後の行で次のエラーがスローされます。
これは、Automapper が処理する非常に単純なケースのように思えますが、エラーを修正できないようです。任意の提案をいただければ幸いです。
c# - Automapper v5 アップグレード後の空のプロパティ値
以下のコードは、Automapper の v3 では機能していましたが、v5 では機能しなくなりました。 UPDATE v4でも動作します。
CallScheduleProfile
そのコンストラクターでTitle
、値を渡すクラスのインスタンスにプロパティを設定しますtrue
。
CallScheduleProfileViewModel
そのコンストラクターで、とTitle
の値を渡す別のクラスのインスタンスにプロパティを設定します。true
"Title"
AutoMapper で 4 つのクラスすべてのマッピングをセットアップしてから、Map を呼び出します。
その結果、マップの後、Title
プロパティCallScheduleProfileViewModel
のブール値はありますtrue
がFriendlyName
、コンストラクターで設定されていても空です。
私が信じているのは、コンストラクターCallScheduleProfileViewModel
が呼び出されFriendlyName
て割り当てられているということですが、マッピングが発生すると、コンストラクターが呼び出され、存在するEntry
プロパティがマップされ、それがプロパティにUxEntry
割り当てられ、Title
デフォルトFriendlyName
では null になります。その値FriendlyName
に存在しないUxEntry
ものはコピーされません。
FriendlyName
その仮定は間違っているかもしれませんが、どちらにしても、マッピングにデータを入力するにはどうすればよいですか?
更新: ネストされた型に関する Automapperのドキュメントを確認しましたが、ドキュメントで提供されているコードにも問題が存在します。文字列プロパティをコンストラクターに追加してInnerDest
その値を設定すると、その値が null になった後です。OuterDest
Map