6

fluentNhibernate と Asp.net MVC を使用しているサイトがあります。ユーザーがそのレコード (オブジェクト) の 10 個のプロパティのうち 8 個を編集できるようにする編集ビューがあります。フォームを送信してモデルがバインドされると、編集できない 2 つのフィールドが、プロパティのタイプに応じて空の文字列またはデフォルトの DateTime 値としてビューモデルに返されます。

ビューモデルをドメイン エンティティにマップするために AutoMapper も使用しているため、データベースからオブジェクトの新しいコピーを読み込んで、不足している 2 つのプロパティを手動で設定することはできません。編集したくないフィールドを保持する最良の方法は何ですか?

機能する 1 つの方法は、ビューの非表示の入力フィールドに値を保持することです。それは機能しますが、気分が悪くなります。おすすめを教えてください。AutoMapper でこの目的の機能を構成する方法はありますか?

更新: わかりましたので、フィールドを無視しようとしているわけではないと思います.nullまたは空の文字列値を保持しないようにしています。AutoMapper のフィールドを無視すると、それが行われます。リポジトリに保存する前にそれらをマップしようとすると、それらは無視され、null になります。

4

3 に答える 3

2

Automapper に 2 つのプロパティを無視するように指示できます。

Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());

関連する可能性のある質問

于 2009-08-13T22:24:48.633 に答える
2

asp.net mvc DefaultModelBinder は拡張可能であり、それをオーバーライドして独自のバインディング スキーマを作成できます。しかし、これには 2 つの「隠し入力フィールド」よりも多くの作業が必要になります。

于 2009-08-14T00:53:26.307 に答える
0

TEntity も受け入れる AutoMapper.Map オーバーロードを使用できますか?!

entity = Mapper.Map(viewmodel, entity);

ビューモデルにプロパティがない限り、エンティティの値は変更されません。渡されるエンティティを受け取り、viewmodel のプロパティのみをエンティティに適用します。

于 2011-12-29T20:59:30.790 に答える