問題タブ [valueinjecter]
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 を使用してフラット オブジェクトを複雑なオブジェクト グラフにマップすることは可能ですか?
PersonDto.BirthCertificateFatherName を Person.BirthCertificate.FatherName にマップします。
c# - IDataReader からマッピングするときにカスタム列名から読み取るように AutoMapper を構成できますか?
マッピング構成の疑似コード (以下のように) は不可能です。これは、ラムダがタイプ IDataReader にしかアクセスできないためです。一方、実際にマッピングすると、AutoMapper は各IDataRecord
whileの各「セル」に到達しIDataReader.Read() == true
ます。
実行時に AutoMapper 構成を使用するか、以下の要件を満たす他の動的なアプローチを使用して、これを行う方法を誰でも思いつくことができますか?
要件はIDataReader
、のプロパティ名と一致しない列名を持つ可能性のある受信をサポートすることでMyDTO
あり、信頼できる命名規則はありません。IDataReader
代わりに、実行時にユーザーに期待される列名をviaで見つかった実際の列名と相互参照するように求めますIDataReader.GetSchemaTable()
。
c# - AutoMapperを使用してIListプロパティを含むオブジェクトを複製する方法
AutoMapperを使用して次のクラスのクローンを作成しようとしています。
このClone
メソッドはMainDataプロパティに対しては正常に機能しますが、詳細リストの浅いコピーしか実行しないようです。追加しようとしまし.ForMember(d => d.Details, o => o.UseDestinationValue())
たが、詳細リストがまったくコピーされません。詳細リストもディープクローン化するにはどうすればよいですか。つまり、すべてのリストアイテムを含む2つの完全に独立したオブジェクトになりますか?
更新: NHibernateでこれらのオブジェクトを使用しているため、Idプロパティを除外する必要があるため、Serializableソリューションがこれを実行するかどうかはわかりません。
UPDATE2:上記のコードを変更してIListも複製しました。NHibernateにすでに保存されていると思わせるプロパティを除外できるため、これは正常に機能しているようです。
enums - 説明を列挙する AutoMapper 文字列
要件を考えると:
オブジェクト グラフを取得し、2 番目の文字列プロパティの処理された値に基づいてすべての列挙型プロパティを設定します。ソース文字列プロパティの名前は、"Raw" の接尾辞が付いた enum プロパティの名前になることが規則で定められています。
処理されるとは、指定された文字などを取り除く必要があることを意味します
カスタムフォーマッター、値リゾルバー、型コンバーターを見てきましたが、どれもこれに対する解決策のようには見えませんか?
独自のリフレクション ルーチンとは対照的に AutoMapper を使用したい理由は 2 つあります。a) プロジェクトの残りの部分で広く使用されているため、b) 再帰的なトラバーサル ootb が提供されます。
- 例 -
以下の(単純な)構造と、これを考えると:
tmp2 の MappedCountry 列挙型が Country.UnitedStates であり、Person プロパティの性別が Gender.Male であることを期待します。
ありがとう
c# - automapper を使用して IDataReader をネストされた DTO にマップすることは可能ですか?
フラットなデータリーダーをネストされた DTO にマップできることを望んでいました。次のコードを実行すると、名前は null になります。私は何か間違ったことをしていますか、それともこれは不可能ですか?
asp.net-mvc - Automapperを使用して文字列を列挙にマップします
私の問題は、データベースから返されたLinq2Sqlオブジェクトからビューモデルをハイドレイトすることです。私たちはいくつかの分野でこれを行い、それのために素晴らしいレイヤードパターンを作り上げましたが、最新のアイテムはいくつかの列挙型を使用する必要があり、これは全体的に頭痛の種を引き起こしました。現在、データベースからプルバックし、Automapperを使用してViewmodelにハイドレイト(またはフラット化)しますが、モデルに列挙型があるとAutomapperで問題が発生するようです。他のすべてのマッピング要件を十分に満たすカスタムresovlerを作成しようとしましたが、この場合は機能しません。
コードのサンプルは次のようになります。
次のエラーが発生します
すべてのマッピングアクションでAutomapperを使い続けたいのですが、多くの人がこのタイプのマッピングを行わないと言うのを見てきたので、間違って使用しているのではないかと思い始めています。仕方?また、ValueInjecterについていくつか言及しましたが、これはAutomapperの代替手段ですか、それともAutomapperの穴を塞いでモデルの水和を行い、Automapperを使用して平坦化するのが便利ですか?
はい、ViewModelで文字列を使用することもできますが、私はマジックストリングのファンではありません。この特定のアイテムは、ヘルパーがさまざまな場所でロジックを実行するために使用します。
map - Valueinjecter で注入されたオブジェクトへの Linq の選択
IQueryable の結果をオンザフライで挿入されたオブジェクトに変換できますか?
私は Valueinjecter の助けを借りてこれを行うことができることを知っています:
したがって、これの代わりに:
次のようなものを使用したいと思います:
私が atm を持っている他の代替手段は、IEnumerable をループして、代わりに注入されたオブジェクトを使用して IEnumerable を作成することです。
c# - AutoMapper 対 ValueInjecter
StackOverflow でAutoMapperのものを探しているたびに、 ValueInjecterについて何か読んでいます。
それらの間の長所と短所 (パフォーマンス、機能、API の使用、拡張性、テスト) を教えてもらえますか?
asp.net-mvc - ViewModelオブジェクトからEFモデルエンティティへの変換ここで?
現在、Entity Framework v4エンティティに基づくリポジトリがあります(CRUDおよびGET操作が実装されています)。これらのエンティティに対応するビューモデルを作成中です。それらの間に変換/マッピングをどこに置くべきですか?コントローラで、またはリポジトリを変更して、そのメソッドでマッピングを実行し、ビューモデルタイプのオブジェクトに戻る(または受け入れる)ようにしますか?
私はこれをすべきですか
またはこれ
nhibernate - Value Injecter : ドメイン モデルへの Dto (NHibernate)
ValueInjecterを使用して、ドメイン モデルからサービス レイヤー経由で提供される DTO にプロパティをマップしています。問題のサービスは更新も受け入れます...そのため、更新された DTO が渡され、これがドメイン オブジェクトに注入されて保存されます。
上記のコードが行うことはすべて、Property Member.Country.Code を更新することだけですが、これは明らかに私が必要としているものではありません。
したがって、ドキュメントから、オーバーライドを作成する必要があると考え、これを取得しました:
私の問題はデバッグ中です。CountryLookup は呼び出されません。
私が考えることができる考えられる理由:
- Nhibernate Proxy クラスにより、値インジェクターが国の型と一致しなくなりますか? 平坦化中に機能するため、これは意味がありません。
- おそらく、何らかの理由で非平坦化が発火していないのでしょう。つまり、Dto は CountryCode であり、ドメインは Country.Code です。
Dto で CountryCode プロパティを使用して countryService.LookupCode を呼び出し、更新プログラムの挿入中に使用する正しいオブジェクトを返す必要があります。