問題タブ [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 - ValueInjectorまたはAutomapperを使用しているときに、「Target」オブジェクトの値が「Source」オブジェクトのnullによって上書きされないようにするにはどうすればよいですか?ネストされたマッピングの問題?
私の問題
ビューに存在しない同じクラスの「ソース」オブジェクトプロパティは、「ターゲット」オブジェクトの同じプロパティをnullで上書きしています。これを防ぐにはどうすればよいですか?影響を受けるのは、入力された(nullではない)プロパティのみが「ターゲット」オブジェクトにマージされるようにする方法です。Automapperでもこれを試しましたが失敗しましたが、代わりにAutomapperソリューションを使用できれば幸いです。
この「ヌルマッピング」の質問が以前に出てきたことはありがたいですが、ネストされたオブジェクトがあるため、私の状況がより複雑になるのではないかと心配しています。提案されたオプションを試してみましたが、機能させることができませんでした。だからここにいます。
助けてくれてありがとう。
これは複雑な問題であり、特に誰かが私のためにコードサンプルを作成できる場合は、これに関する支援に本当に感謝しています。私は数日間これの上に髪を引っ張っています:(
私が試みたこと
2つのオブジェクトがあります。1つはoriginal( "Target")で、もう1つ( "Source")はフォーム(ビュー)によって入力されます。
元の「ターゲット」オブジェクト(myOrigDoc)は次のようになります。
フォームの「ソース」オブジェクト(myDoc)は次のようになります。
次に、マッピングを行います。
次のインジェクターを使用します。
そして私は最終的に:
フォームには「DateOfBirth」フィールドがないため、次を呼び出すと、モデルバインディングが新しい「MyDoc」オブジェクトの「DataOfBirth」プロパティにnull値を作成していると思われます。
どうもありがとう、エド。
編集1:これはサブクラスによるネストされたマッピングの問題だと思います。ValueInjectorでこれをどのようにソートするかわかりません。
EDIT2 :ネストされたマッピングのドキュメントから可能なオートマッパーソリューションですが、動作させることができませんでした。私はまだ自分のヌルをターゲットに渡しています。
c# - エンティティと親エンティティのマッピングに関する ValueInjector スタック オーバーフロー
ValueInjecter を使用して、POCO エンティティを DTO エンティティにマッピングしています。Automapper Simulationをメインのマッパーとして使用しています。これにより、次のようなマッピングを簡単に記述できます。
親子関係を持つデータベースからエンティティを取得する必要があるまで、これはうまく機能しています。問題は、私が使用しているこのコードがすべてのプロパティを再帰的に通過することです。このようなPOCOがあれば、
私のコードは、循環参照をマップしようとして、無限ループを爆撃します。Automapper Simulation ソースをメインのマッパーとして引き続き使用したいのですが、問題を解決する方法がわかりません。どんな助けでも大歓迎です!
vb.net - ValueInjecter と ICollection(Of ViewModel)
関連する2つの単純なビューモデルがあります。linq include ステートメントを介してデータをクエリできますが、それをビューモデルに挿入すると、icollection は何もありませんか?
ビューモデル:
クエリ:
ユーザーはオブジェクトの中にいます!
注入:
ユーザーは何もない?
c# - valueinjecterを使用したEF4varオブジェクトのDTOへのマッピング
以下のようなlinQクエリがあります
個人テーブルには多くのフィールドがありますが、IDと名前のみを操作する必要があります。同様に、BankAccountの場合、ID、AccountType、およびAccountBalanceのみを操作する必要があります。
次に、上記のようなレコード変数タイプを、次のようなメソッドを使用して別のマッパークラスに渡します。
CompositeDTOは以下のとおりです
CompositeDTO
問題は、を使用してタイプのオブジェクトに値を取得できないことです。dto.InjectFrom(rec )
これはどのように行う必要がありますか?ここのドキュメントは、2つの異なるソースクラスからの1つのフィールドに対してそれを行う方法のみを説明しました。私は何かを逃したことがありますか?これはできますか?
c# - ValueInjecter によるフラット化
ValueInjecterを使用して、複数のオブジェクトをビュー モデル オブジェクトにマップしようとしています。しかし、期待どおりには機能しません。
コード:
期待される出力:
実効出力:
知らせ
のCall.Number
ように表されるNumber
は、CallViewModel
によって上書きされCustomer.Number
ます。と の両方が、指定されたソースとの値を取得することはCustomerName
ありません。OperationTimeFrom
Customer.Name
Operation.TimeFrom
そのシナリオで私は何をしなければなりませんか?ValueInjecter はこのシナリオをサポートしていますか?
automapper - ValueInjecter - ソースの一部のプロパティをターゲットのリストに変換する
Value Injector: http://valueinjecter.codeplex.com/を使い始めたところですが、質問があります:
多くのプロパティを持つ Source クラスがあります。一部のプロパティには、「Profile」という共通の接尾辞が付いています。これらのプロパティは必ずしも文字列ではありませんが、ほとんどは文字列です。ターゲットには 1 つのプロパティがありDictionary<string, string>
ます。「プロファイル」で終わるすべてのプロパティを、Dictionary<string, string>
キー = プロパティ名および値 = プロパティの値で挿入したいと考えています。私はそれができると思いますが、ドキュメントは私にはあまり明確ではありません。誰かが私を正しい方向に向けることができますか? ありがとう!
c# - GAC できる ValueInjecter の署名付きバージョンはありますか?
GAC できる ValueInjecter の署名付きバージョンはありますか? GAC できるように厳密な名前のバージョンが必要です。
c# - この拡張機能を更新して FlatLoopValueInjection を処理する
このコードはstackoverflowで見つけましたが、FlatLoopValueInjectionを処理できないことに気付きました。これを処理したいのですが、方法がわかりません。
これを更新する必要があることは知っていますが target.InjectFrom(source);
、何か(FlatLoopValueInjection、UnflatLoopValueInjectionなど)を取り込んで使用できるとしたら何が良いかわかりません
asp.net-mvc - MVC ViewModel のアプローチとマッピング。最善のアプローチ
私は、MVC を使用して大量の割り当ての問題を解決し、正しい方法で物事を行うためのさまざまなアプローチを検討してきました。
これまでのところ、私が最良だと思う 2 つのアプローチは以下のとおりです: (AutoMapper も調べました)
1: Value Injecter - これはうまく機能しているように見えますが、サードパーティのライブラリにも依存しています。
2: UpdateModel メソッドを使用して、ドメイン モデルで必要なプロパティのサブセットを公開するビュー モデル インターフェイスにバインドします。http://www.codethinked.com/easy-and-safe-model-binding-in-aspnet-mvc
上記のプラクティスのいずれかを使用して、アプリケーション全体をコーディングする前に (それぞれに 1 週間かけてどちらが好きかを判断する必要はありません)、これら 2 つの方法を実際に使用した経験があり、どちらをお勧めしますか?
c# - ValueInjecterを使用して、遅延読み込みリストとプロパティをトリガーせずにEntityFrameworkPOCOをDTOにコピーします
ValueInjecterを使用して、EntityFrameworkPOCOのディープクローンを同様のDTOクラスに作成する際に問題が発生しました。
複数の関連エンティティ/ナビゲーションプロパティを持つ子エンティティを持つ複雑なPOCOオブジェクトからやや単純なDTOに注入している場合、ValueInjecterはまだ複数のプロパティ値に触れており、データベースからこのデータの遅延読み込みが発生しているようです。
ValueInjecterは、指定されたターゲットに値を注入する準備をするときに、特定のソースオブジェクトのすべてのプロパティの値を取得すると思います。
私の実際のプロジェクトはかなり複雑ですが、例として、NerdDinnerの例を取り上げて、はるかに単純な方法で問題を再現しました。(NerdDinnerは、EF4を使用した最初の開発コードの例です(ScottGu NerdDinnerの例)。
したがって、2つのモデルクラスがあります。
と
DTOクラスも作成しました。
にRsvpsコレクションがないことに注意Dinner
してくださいDinnerDTO
。
また重要なのは、オブジェクトのディープクローン作成にCloneInjection規則を使用していることです。このコードは、ここSOだけでなく、他の多くのサイトでも、ディープクローンインジェクションを実行するためのアプローチとして提案されています。このコードはここにあります:CloneInjectionコード
ここで、発生する遅延読み込みを強調するために、Id=1のディナーに10,000のRSVPを挿入しました。
次に、次のコードを実行します。
の行にブレークポイントを設定し、InjectFrom
それをステップオーバーすると、10,000 RSVPを遅延ロードするため、かなりの遅延が発生します。Match
とメソッドの両方でCloneInjectionコードにブレークポイントを設定した場合、ロードラグSetValue
が解決されるまで、どちらもヒットしません。これは、プロパティの遅延負荷を発生させているのはValueInjecterの内部にある必要があることを示していRSVPs
ます。
さて、上記のコードをこれに変更すると:(Include
クエリにを追加する)
この変更により、RSVPのリストの「EagerLoad」が強制されます。予想どおり、ラグはクエリと一致し、ラインはInjectFrom
ラグなしで過ぎ去ります。
StackOverflowに関する漠然と関連するいくつかの投稿を読みましたが、データコンテキストでLazyLoadingを無効にしてから有効にすることをお勧めするものもあります。私はそれを試しました、そしてそれがうまくいく間、それはかなり汚れたように感じました。
私はこの投稿(遅延読み込みや熱心な読み込みをトリガーせずにNHibernate POCOをDTOにコピーする)と関連コードを読みました。彼のアプローチは、プロパティが初期化されていないプロキシであるかどうかを判断し、何らかの方法でそれらを取り除くためにいくつかのNHibernateメソッドを使用しているようです。EF4で似たようなものを見つけることができませんでした。
私を本当につまずかせるのは、Rsvpsコレクションが私のDTOオブジェクトにも含まれておらず、その値にも興味がないということです。これは私には正しくないようです。ValueInjecterコードは、ターゲットオブジェクトが気にしない可能性のあるプロパティの値を問い合わせるべきではないと思います。
ValueInjecterでこの動作をオーバーライドできる方法はありますか?どういうわけか、 ?のSetValue
メソッドのように、値が必要であることが絶対に確実になるまで、プロパティ値の評価を延期します。ConventionInjection
そうすれば、少なくとも、私のDTOが望まないプロパティを評価することはありません。
私が考えることができる最善の解決策は、ValueInjecterまたはカスタム規則を使用して、アンロードされた遅延読み込みプロパティを何らかの方法で検出できるようにすることです。評価する代わりに、ターゲットでそのプロパティをnullに設定します。しかし、それは不可能だと思います。
私が使用すべきEFを介したより良いアプローチはありますか?データベース内のすべてを熱心にロードしたくありません。
私は完全にオフになっていて、問題はValueInjecterにはまったくありませんか?
*編集* 私は解決策を見つけてこの質問に答えました、私がそれを間違っているだけなのか、それとももっと良いアプローチがあるのか、私はまだ興味があります。