問題タブ [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.
c# - EntityFramework と MVC ModelBinding を使用して特殊文字を含むフィールドを保存するとエラーが発生する
ASP.NET MVC4 アプリケーションでエンティティを保存するときに、(2) フィールドに問題があります。
- Eメール
- 電話
ご存知のように、これらのフィールドには通常、@
特殊文字が含まれます。-
以下は、コントローラーから ValueInjecter を使用してモデル バインディングを介してハイドレートされたオブジェクトからモデル クラスを注入するコードです。
私が得ているエラーは次のとおりです。
「文字列またはバイナリ データは切り捨てられます。ステートメントは終了しました」
一見すると、SQL のフィールドのサイズだと思うかもしれませんが、実際の問題はこれらの特殊文字のために偽装されています。フィールドに次のように入力すると:
電話: 11234565454514564561
電子メール: ブラブラブラブラブラ
...その後、すべてが機能します。
ただし、次のように入力すると:
電話: 123-456-7890
電子メール: test@wow.com
「文字列またはバイナリ データが切り捨てられます」というエラーが表示されます。だから私は回避策を見つけましたが、これは完全に不必要で、おそらく間違った方法のようです。C# エスケープ文字を使用して、モデルにバインドされたオブジェクトからエンティティに値を明示的にマップすると、以下に示すように値が挿入されます。
正直なところ、犯人がどこにいるのかわかりません。これは MVC モデル バインディングの問題ですか、Entity Framework の問題ですか、C# の取引ですか、それとも ValueInjecter ですか? ViewModel プロパティで注釈を使用して、Phone
andのようなデータ型を指定しようとしましEmail
たが、問題は解決しませんでした。それらの文字をエスケープしてコードで明示的にすることによってのみ、それを行う方法がありました。
特殊文字を含むメールや電話などのフィールドは、MVC を使用して常に EF に保存されることを知っているため、間違っていることは何ですか? 特殊文字を含む値を取得するたびに、これらのコード行を追加する必要がないようにするにはどうすればよいでしょうか?
ありがとう!!
valueinjecter - ViewModel への LinqToEntities 結合のマッピング
次のモデルとビューモデルがあります(簡潔にするために編集されています):
2 つのテーブルを内部結合してビューモデルにマップするにはどうすればよいですか?
このコードは機能しません。
c# - インライン コンストラクターと InjectFrom 呼び出しは Object を返します
ValueInjecter を使用すると、次のようなコードを書くことがよくあります。
しかし、予想外に、foo1 は Foo ではなく Object 型になります。と同じ
と
コンパイルされません。簡単にできるから大したことじゃない
また
どちらも期待どおりに機能しますが、興味があります。最初の方法が機能しないのはなぜですか?
c# - NHibernate は Iesi.Collections.ISet に対して何をしていますか?
GetUsersForRole と呼ばれる私のサービスをテストしようとしています。単純な文字列を受け取り、これを RoleRepository に渡して NHibernate を処理し、RoleName に渡された文字列を使用して役割のコレクションを取得します。これを行うために、RoleRepository に次のコードを呼び出す Find 関数があります。
したがって、上記のコードはロールのリストを返し、その中には、Users と呼ばれる Iesi.Collections.ISet として定義されたプロパティがあります。特定のロールにユーザーが (多対多で) 関連付けられている場合、このプロパティが設定されます。
ここから、この Find 関数の結果を処理して最初の Role を取得し、ValueInjector を使用して role.Users プロパティを IEnumerable セットにマップします。これは 100% 機能します。これを行うコードは次のとおりです。
値インジェクターの Automapper Simulation クラスを使用して、セット マッピングを処理しています。これはここにあります。Iesi.Collections.ISet から IEnumerable へのマッピングを操作するには、特別な Mapper を作成する必要がありました。
繰り返しますが、これは 100% 機能します。ISetToIEnumerable マッパー クラスでは、引数のソースは Iesi.Collections.ISet {NHibernate.Collection.PersistantSet} として表示されます。これは、これを単体テストしようとするときに問題が発生する場所です。
この単体テストで成功した実行をテストしようとしています:
これをデバッグして service.GetUsersForRole("role1") 呼び出しにステップ インすると、mockRoleRepository からモック データが返されます。ここでの問題は、role.Users プロパティが Iesi.Collections.HashedSet として型を返すことです (これは、テストと NHibernate での実際の実行の両方で、Entity Constructor でインスタンス化される方法です)。これは私の ISetToIEnumerable クラスの大きな問題になります。私のソースは、Iesi.Collections.HashedSet として型付けされています。
NHibernate セッション インスタンスがないため、NHibernate.Collection.PersistantSet を使用してモックを入力できないことはわかっています。ここで何が起こっているのか、そしてモックデータのアレンジメントで NHibernate が Iesi.Collections.ISet に対して行っていることをどのように複製できるかについて、誰か考えがありますか?
c# - ValueInjector または AutoMapper を使用したコレクションのフラット化
次のサンプル クラスがあるとします。
jgauffinの拡張メソッドを使用してValueInjector を拡張してコレクションを操作すると、次のように のコレクションがOrder
のコレクションにフラット化されますLineItem
。
2 つの質問:
- 上記のパターンは、ValueInjector を使用して のコレクションを
Order
のコレクションに平坦化する正しい/効果的な使用法LineItem
ですか? そうでない場合、代替手段は何ですか?(ValueInjector 拡張メソッドを使用せず、単一の for each ループを使用して、Header と OrderItem の両方をフラット化された LineItem に挿入する以外) - AutoMapper を使用する場合に相当するものはありますか?
c# - カスタム値インジェクションを作成してエンティティをビュー モデルにマップするにはどうすればよいですか? 試行込み
ValueInjector (NuGet の最新バージョン) を使用して、ビュー モデルに EntityFramework Code First オブジェクトのデータを挿入しようとしています。この逆もやりたいと思いますが、これは私が始めている試みです。
私はさまざまなマッピングを調査し、それらの多くを試しました。私が必要とするものを見つけることができず、私の必要性はかなり基本的なものだと思います(SOにはこれらの質問がいくつかあり、それぞれが異なる答えを得るようです.
私は本当にこれについてデューデリジェンスをしようとしました。CodePlex をググってトロールし、ProDinner アプリケーションをダウンロードしました (起動して実行し、デバッグでコードをステップ実行しました)。
私は、注入を処理する独自の ValueInjection クラスを持っているところです。コードとオブジェクトを非常にわかりやすい方法で貼り付けて、それらを取得して実行できるようにします。ベースの LoopValueInjection を使用するソリューションがありますが、エンティティからマッピングへのインジェクションとエンティティへのマッピングを手動で行う必要があるため、私はそれが好きではありません。ProDinner の例には、よりテンプレート化されたアプローチがあり、気に入っていましたが、自分のニーズに合わせることができませんでした。
私のコードが論理的に混乱しているのは、ソース プロパティの型が単純なオブジェクトでない場合に再帰的インジェクションを強制的に発生させる方法を理解していないことだと思います。この例では、Person.Address.* プロパティは、PersonViewModel クラスのプロパティと名前と型が一致します。ただし、インジェクションは Person のプロパティをループし、Person.Address プロパティの名前と型を照合しようとします。
ラインかと思った
この再帰を実行しますが、実行しないと思います。
だから...誰かがこれを修正する方法について私に指示を与えることができますか?
dependency-injection - AutomapperまたはValueInjecterはDI/IOCを使用しますか?
私はこれらのツールのどちらも使用していませんが、どちらかがDI / IOCを使用しているのか、それとも独自のDI / IOCであるのか、それともこれらのツールの要点を見逃しているのでしょうか。
それらのいずれかがどのDI/IOCを使用するよりもDI/IOCを使用する場合、それらは使用しますか?基本的にパフォーマンスに興味があります。
c# - AutoMapperまたはValueInjecterを使用してソースプロパティをターゲットメソッドにマップすることは可能ですか?
単純でプレーンなソースオブジェクトを、インターフェイス(IFeatureClassSetValue(index, value)
)を実装し、宛先'プロパティ'を設定するための名前のパブリックメソッドのみを持つ宛先オブジェクトにマップしようとしています。
オブジェクト(DTO / BO)をIFeatureClassを実装するオブジェクトに動的にマッピングできるようにしたい。FindField(string fieldname)
フィールドのインデックスは、フィールドのインデックスを返すと呼ばれるインターフェイスの別のメソッドを使用して見つけることができます。
AutoMapperまたはValueInjecterを使用してこの種の作業を行うことは可能だと思いますか。それとも、これを行うのに役立つパターンや何かがありますか?もしそうなら、それを行う方法を教えていただけますか?ドキュメントと既存の例を確認しましたが、ニーズに合った例が見つかりません。
よろしく、クリスチャン
asp.net-mvc-3 - 新しいオブジェクトの値を同じクラスの元のオブジェクトの値に割り当てる一般的な方法はありますか?
サブクラスとプロパティを持つ Original Document オブジェクトがあります。フォームから入力された値を保持するこのオブジェクトのサブセットである別のオブジェクト、必要に応じてビューモデルがあります。両方のオブジェクトが同じクラスに属しているため、構造は同一です。
新しいオブジェクトから元のオブジェクトに一般的に値を割り当てる方法はありますか? 私の現在のアプローチは明示的です:
また、値を持つ (null ではない) プロパティのみが割り当てられるようにしたいと考えています。
これはできますか?
よろしくお願いします。
エド
編集: ValueInjector の実験と、null が割り当てられないようにするためのそのクラス。
これを呼び出すコード:
EDIT2: Automapper で使用できる可能性のあるコード。null を無視して実際にマージを行うことについてはまだわかりませんが。
アドバイスやヘルプをお寄せいただきありがとうございます。