問題タブ [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.
asp.net-mvc - Nhibernate で SaveOrUpdate の前にエンティティをロード/取得する必要がありますか?
私の ASP.NET MVC アプリケーションでは、ドメイン モデルをビュー モデルから分離しました。
エンティティをビューモデル オブジェクトに変換して、ビューに必要なデータのみを「フィード」できるようにします (この目的で valueinjecter を使用しました)。
保存プロセス中に、コントローラーはビューモデル オブジェクトを取得し、それをドメイン モデル エンティティに変換して、SaveOrUpdate で永続化しようとします。既存のレコードを更新しようとすると、エンティティが適切な ID を持っていても、Nhibernate はそれを新しいオブジェクトと見なし、INSERT を強制することに気付きました。
すべてのフィールドを再度マップすることを避けたいため、以前にエンティティをロード (Get/Load) していません。
私が間違っていることはありますか?それを達成するための最良の方法は何ですか?
***** - アップデート - ***
私のコントローラーはユーザー(ViewModel)を受け取り、それを検証し、サービスレイヤーを介してエンティティとして保存しようとします:
これはサービスです:
ビューモデル/エンティティを何度も変換する必要があるという事実について懸念があります。新しいユーザーを保存しようとすると、次のメッセージが表示されました。別のトランザクションによって行が更新または削除されました (または、保存されていない値のマッピングが正しくありませんでした)
おそらくこれは、ダーリンが私に言ったことに何らかの形で関連しています。
私がやろうとしていることを行うためのより良い方法はありますか?
アップデート
「行が更新または削除されました...」というエラーは、マッピング用に定義されたバージョンがあることが原因であることに気付きました。私が理解できるのは、更新したいエンティティと一致するIDとバージョンが必要だということです。
他の人が DDD + ASP.NET MVC + NHibernate でこれらのことをどのように行っているかを理解したいですか???
解決
すべてのエンティティにバージョンが定義されています (言い忘れました、申し訳ありません):
Ayende がここで説明したように、Nhibernate は次のようなクエリでエンティティを更新しようとします。
ここで、y はエンティティのバージョンです。エンティティにバージョンを設定していなかったため、例外 StaleObjectException が生成されました。
ビューモデルにバージョン フィールドを追加しました。ビューの非表示フィールドに ID とともに保存します。
私のコントローラーは、ID とバージョンを含むビューモデルを受け取るようになりました。これらのフィールドをドメイン エンティティに挿入し、リポジトリに保存させます (エンティティをリロードしません)。
StaleObjectException例外が発生した場合は、他の誰かが DB 行を更新したことを意味し、ユーザーにフィードバックを提供します。
automapper - ValueInjecter の質問
AutoMapper を使用した後、このサイトでValueInjecterに出会いました。私はそれを試していますが、おそらく非常に単純なシナリオに固執しています。
しかし、コード サンプルを掘り下げる前に、ValueInjecter が Medium-Trust Web 環境で動作するかどうか知っている人はいますか? (ゴダディのように?)
さて、コードに!私は次のモデルを持っています:
次のDTOにマップしたい:
したがって、モデルから DTO にマップする場合は、Model.Name.First -> DTO.FirstName が必要であり、DTO からモデルに移動する場合は、FirstName -> Name.First が必要です。私の理解では、これは単純な Flatten/UnFlatten ではありません。というのは、単語も逆になっているからです。つまり、FirstName <--> Name.First. 姓と名は同じ種類のルールを使用できますが、ミドルイニシャルはどうでしょうか? Model.Name.MiddleInitial -> DTO.MiddleInitial.
いくつかのプラグインがあるようですが、どれも私が望むことをしていないようです。他の誰かがこのシナリオに遭遇しましたか?
c# - ValueInjecter を使用して null をマップする
valueinjecter を使用して null をオブジェクトにマップするにはどうすればよいですか? これを行うとエラーがスローされます。
以外のものを使用する必要がありますInjectFrom()
か?
より詳しい情報
オブジェクト ドメインを返すリポジトリがあります。次に、このドメインをビューモデルにマップします。オブジェクトが存在しない場合、リポジトリは null を返します。null オブジェクトをビューモデルにマップできません。どうすればこれを達成できますか?
valueinjecter - ValueInjecter: バイナリはどこからダウンロードすればよいですか? CodePlex または NuGet?
2つのオプションがあると思います:
1) CodePlex からダウンロード: http://valueinjecter.codeplex.com/
2) NuGet の公式パッケージ ソースからダウンロードします (現在、ダウンロード数は 133 のみです)。
NuGet からダウンロードしたいのですが、安全性が少し心配です。誰がパッケージを作ったのかわかりません。NuGet のパッケージは、ValueInjecter の作成者または他の信頼できるユーザーによって作成されたものですか?
ありがとう
c# - COM オブジェクトをマップするための ValueInjecter を取得できません
次のコードを参照してください。AutoMapper を使用するとテストに合格しましたが、ValueInjecter を使用すると失敗しました。
何か案は?ありがとう。
編集:
Omu の回答に基づいて、問題は FirewallAPI.dll クラスだけでなく、COM オブジェクトに関連しているようです。そのため、タイトルを「ValueInjecter を取得して FirewallAPI.dll クラスをマップできません」から「ValueInjecter を取得して COM オブジェクトをマップできません」に変更しました。
asp.net-mvc - IQueryableを備えたValueInjecter
ValueInjecterでマップIQueryable<User>
する必要があります。IQueryable<SimpleUser>
これは可能ですか?
私は試した:
しかし、これを保存された式に変換することはできません...まあ、メソッドInjectFrom
。
automapperはこれを行うことができますか?
私はこれに似たものが欲しい:
しかし、ある種のマッパーツールを使用します。
c# - ValueInjecterとDataTable
私はValueInjecterを理解しようとしていたので、自家製の小さなORMで使用できます。DataRowとDataTableのマッピングをサポートする必要があるため、このタイプのマッパーを実装しようとしています。そして正直なところ、ドキュメントは十分ではなく、私はそれを試してみたかったのです。たぶん、Omuまたはこのライブラリの他のユーザーが答えるでしょう。
これが私のDataRowインジェクターです
これはかなりうまくいきます。これが、DataTableにこれを実装して、IenumarableまたはIListを返す方法についての質問です。私が期待するコードスニペットはのようなものです。
どうすればこれを達成できますか。ありがとうございました
~~~~~~ここに私がOmuの助けを借りて書いた完全なコードがあります
automapping - ValueInjecter-再帰的マッピング
私は自動マッピングにかなり慣れておらず、ValueInjecterにも慣れていません。簡単な質問で申し訳ありませんが、どこにも答えが見つからないようです。
再帰的なマッピングを行うにはどうすればよいですか?たとえば、(データサービスからの)サブジェクトをSubjectViewModelにマップする現在のファクトリメソッドは次のとおりです。
これはValueInjecterにとっては非常に難しいタイプの状況だと思います。ですから、誰かが私を正しい方向に向けることができれば、それをいただければ幸いです。
これは偽の、しかし完全なコードサンプルです:
編集-これは単純なアプローチであり、再帰的ではないことを私は知っています。今、私は例外なくここまで到達しようとしています
今私は得る:
System.ArgumentException:タイプ'System.Collections.Generic.List`1[TestValueInjector.SubjectViewModel]'のオブジェクトをタイプ'System.String'に変換できません。
c# - IEnumerableをチェックしています反射あり
編集
この質問の最低限のバージョンは、もし私が持っているなら、oがリフレクションobject o
で実装されるタイプのものであるかどうかをどのようにチェックするのでしょうか?元の質問ははるかに具体的ですが、上記の答えも同様に良いでしょう。この質問について詳しく説明しすぎたら申し訳ありませんIEnumerable<string>
編集終了
以下は、考案されたValueInjecterPOCです。isCollectionMapping
一番下の方法を除いて、すべてがうまく機能します。ソースプロパティとターゲットプロパティの両方がを実装するオブジェクトである場合にのみ、trueを返そうとしていますIEnumerable<respectiveTypes>
。
私も試しましたが、どちらIsAssignableFrom
もうまくIsInstanceOfType
いかないようです。
メソッドの2行目をコメント解除して、「Children」という名前のプロパティを明示的にチェックすると、正常に機能するため、他のすべてが機能します。
注-この例には問題があることを私は知っています。つまり、私は古いものをチェックしようとしていますIEnumerable<>
が、それでも常に戻るのに十分なことを知っていList<>
ます。これは、現時点での概念実証にすぎません。
c# - カスタム ValueInjecter インジェクションでの動的型キャスト
ジェネリック子コレクションの再帰的注入を行うValueInjecterのカスタム注入クラスを作成しましたが、VI サイトの「CloneInjection」サンプルのように複製するのではなく、既存のターゲット オブジェクトで動作します。ただし、現在、既知の型 (ICollection<MyTargetType>) にキャストしているため、インジェクション クラスはハード コードされた 1 つの型にのみ適しています。ジェネリックを動的にキャストする方法を理解できないようですが、何か提案はありますか? 「RecursiveInjection」クラスの SetValue コードは次のとおりです。
ありがとう、DanO