問題タブ [automapper-2]
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.
ef-code-first - ナビゲーション プロパティが null の場合にエンティティを保存する方法はありませんが、ID は入力されています
最近、プロジェクトを MVC4 Web API に移行しました。それ以前は、標準の MVC コントローラーを使用していました。エンティティのポストバック時に、UpdateModel を使用してモデルを更新し、[dbContext].SaveChanges(); を使用してデータベースに永続化します。
すべてうまくいきましたが、Web API には UpdateModel がありません。そこで、代替手段を探しました: AutoMapper.
最初に EF 5 コードを使用し、エンティティ クラスを MVC のモデルとして使用します。
私のモデルクラス(簡略化)は次のようになります。
モデルが JSON で送信される場合、シリアル化中に Parent プロパティは無視されます。
したがって、エンティティを使用して API コントローラーで PUT (更新) メソッドが呼び出されると、Parent プロパティは空になります。
PUT メソッドのコードは次のとおりです。
Parent プロパティはモデルでは null ですが、contextModel ではありません。AutoMapper は、contextModel の Parent プロパティを null で上書きするだけです。
次に、保存すると、ParentId が存在するにもかかわらず、InvalidOperationException が発生します。
操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
これを別の方法で行う方法についての解決策やアドバイスをいただければ幸いです。
asp.net - AutoMapper 使用時にエンティティを取得する方法
AutoMapperを使用して、Asp.net で MVC を使用しています。
このコードからわかるように
マップ EventEditViewModel を Event に変換しようとしています。
CandidateId を実際のエンティティに変換するには、サービス レイヤーを使用する必要があります。
AutoMapper でこれを行うことが可能かどうか、考えはありますか? セットアップ方法
public class Event() { public クラス候補 {get; 設定;} }
automapper-2 - Automapperコンストラクターパラメーター
これを使い始めたばかりで、すぐにパラメーターをコンストラクターパラメーターにマッピングする際に問題が発生しました。
SOで見つけたすべての例を試しましたが、どれも機能していないようで、ドキュメントには、私が見る限りこの機能については記載されていません。
例は次のとおりです。
UserProfileオブジェクトのIdプロパティにアクセスするための構文がわかりません。
別の例は次のとおりです。
これらのラムダのいずれかを使用すると、親オブジェクトではなく、ResolutionContextにアクセスできますか?
何か案は?
c# - Automapperに配列プロパティを上書きさせる方法は?
プロジェクトでAutomapperを使用して、ビジネスエンティティをDTOにマップしています。
コンストラクターでは、Pointsプロパティを空の配列で初期化して、常にnullにならないようにしています。マッピングに基本構成を使用しています。
Automapper 2.0.0では問題なく動作しましたが、バージョン2.2.0にアップグレードした後、内部例外を伴うマッピング例外が発生します。
インデックスが配列の範囲外だった
Automapperは、配列全体を上書きするのではなく、配列のすべてのメンバーをマップしようとしているようです。コンストラクターからプロパティの初期化を削除してnullのままにすると、すべてが機能します。
Automapper 2.2.0を構成して、既存の配列プロパティを常に新しいもので上書きすることはできますか?
automapper - 宛先値に基づくオートマッパー コピー
宛先値が null の場合にのみ、ソース値をコピーしようとしています。次のマップを使用しています
私の状態では、マッピングする前に宛先値が null であることを確認しています。問題は、コピー先の値に関係なく、常にコピーが行われていることです。
私はこれを間違っていますか?
ありがとうイサム
.net - Automapper で LINQ を介してコレクションをスカラーにマッピングするための規則
Automapper は、命名規則によるサブプロパティのマッピングなど、いくつかの優れた規則を既に実行しています。たとえば、プロパティにそのようなプロパティが存在する場合OrderTotal
にマップします。Order.Total
LINQ 演算子名で同様のことを行う方法があるかどうか疑問に思っていました。たとえば、 というコレクションがあったIEnumerable<Appointment>
場合、対象の型に Appointment という型のプロパティがあり、AutoMapper が自動的に という名前Appointments
のプロパティを持っていれば素晴らしいでしょう。AppointmentFirst
First()
現在、このようなことを行う方法はありますか?
c# - AutomapperはSystem.ArgumentExceptionをスローします
AutoMapperをバージョン2に更新しましたが、現在多くの問題が発生しています...
私はリストを持っています、ItemToMap
そしてこれらのオブジェクトのすべては同じオブジェクトへの参照を持っていますTag
でマップしようとするItemToMap
とItemToMapDto
、次のエラーが発生します。
AutoMapper.AutoMapperMappingException:
マッピングタイプ:Tag-> TagDto DAL.Entities.Tag-> DTO.Objects.TagDto
宛先パス:ItemToMap [] [1] .Tag.Tag
ソース値:Entities.Tag ----> System.ArgumentException:同じキーを持つアイテムが既に追加されています。
マッピングは次のとおりです。
これが私の問題を浮き彫りにする単体テストです:
マッピングを機能させるための解決策は何ですか?問題はコード全体に広がっているので、私はグローバルな解決策を探しています...
編集1:
問題は以下のctorにあります。ctorのコードをコメントすると、すべてが正常に機能します...
編集2:
AutomapperはResolutionContext
、すでに設定されているリゾルバーを再利用するためにキャッシュしています。つまり、マッパーをループして、の呼び出しでtrueを返すマッパーを取得しますIsMatch
。これResolutionContext
がキャッシュされているかどうかを知るために、宛先プロパティがすでに設定されているかどうか、およびコンテキストのハッシュコードをチェックします。宛先はCtorで設定されているため、Automapperはこれがキャッシュされていないと見なし、キャッシュされていないリゾルバーを呼び出します。Dictionary
後者のリゾルバーはキャッシュしますが、キャッシュリポジトリとして使用されるハッシュコードがすでに存在するため失敗します
automapper - AutoMapper 複合オブジェクト マッピング - リストのマッピング
私は次のクラスを持っています。ドメイン モデルはエンティティ フレームワークによって作成され、私は POCO を使用しています。
次のマッピングを試しました。
私も試してみました
顧客を更新するために、DB から取得し、customerDTO で更新します
顧客オブジェクトは正しく更新されており、作成日と変更日は変更されていません。しかし、注文リストの各注文は正しく更新されていません。その productId、作成日、変更日は、データベースから取得した値ではなく、デフォルト値に設定されています。
Orders は仮想コレクションであるため、他に何かする必要がありますか?
私は自動マッパーを初めて使用しますが、助けていただければ幸いです。
編集
追加した
アプリの起動時に次のエラーを受け取りました: マップされていないメンバーが見つかりました。以下のタイプとメンバーを確認してください。カスタム マッピング式の追加、無視、カスタム リゾルバーの追加、またはソース/宛先タイプの変更
マッピングを次のように更新しました。
しかし、注文にはまだ上記のプロパティがデフォルト値によって上書きされています
automapper - 文字列リテラルを宛先プロパティにマップする方法
automapperを使用してこのようなことを実行できるようにしたいと思います。
d.Memberは常に「この文字列」であり、ソースモデルの特定のメンバーからマップされないようにしたいと思います。値として「THISSTRING」を使用してソースモデルに文字列フィールドを配置することもオプションではありません。
AutoMapperはこれらの種類のものを何らかの方法でサポートしていますか?
automapper - AutoMappers AllowNullCollections設定をプロファイルに制限できますか?
注:AutoMapperメーリングリストでもこの質問をしました
私のMVCアプリケーションには、基本的に2つのレベルのマッピングがあります(この質問のために簡略化されています)。
2つのプロファイルを作成し、それぞれが適切なマッピングレベルの構成を処理します。
「RepositoryObjects」は最終的にXMLにシリアル化され、RESTWebサービスで使用されます。私たちが見つけた問題は、RepositoryObjectの空のコレクションがXMLの空の要素にシリアル化されることでした。これにより、Webサービスが要素を予期していないか、データを含む要素を予期しているため、問題が発生します。
AllowNullCollections構成設定を使用してこれを解決することができました。これにより、(もちろん)空のコレクションではなくnullコレクションが作成され、正常にシリアル化されます。
ただし、ジミーが指摘しているように、これは実際にはベストプラクティスではないため、これをグローバルな設定として使用することは完全には快適ではありません。RepositoryObject <-> Entity
RepositoryObjectsは自動生成され(とにかく醜い)、アプリケーション内で非常に低レベルであるため、マッピングに含めることができてうれしいです。Entity <-> ViewModel
しかし、可能であれば、マッピングを「破損」させたくないのです。
では、プロファイルごとにこの設定を構成することは可能ですか?
ありがとう。
アップデート
ここでテストコードを作成しました:https ://gist.github.com/4069909
参考のためにここにコピーしました:
ProfileClasses.cs
AutoMapperConfigurator.cs
MappingTests.cs
テストAutoMapper_Configuration_IsValid
しAutoMapper_ProfileTwo_DoesntAllowNullCollections
て合格しますが、がnullでないAutoMapper_ProfileOne_AllowsNullCollections
ため、テストは失敗します。dest.Stuff