web-dev-qa-db-ja.com

Automapper:新しいオブジェクトを作成せずにプロパティ値を更新します

オートマッパーを使用して、新しいオブジェクトを作成せずに別のオブジェクトのプロパティ値を更新するにはどうすればよいですか?

232
ryudice

既存の宛先を取得するオーバーロードを使用します。

Mapper.Map<Source, Destination>(source, destination);

はい、宛先オブジェクトを返しますが、それは他の不明瞭なシナリオのためのものです。同じオブジェクトです。

398
Jimmy Bogard

これを機能させるには、ソースとデスティネーションのタイプが同じであってもCreateMapする必要があります。つまり、Mapper.Map<User, User>(user1, user2);したい場合は、このようなマップを作成する必要がありますMapper.Create<User, User>()

14
Flux Xu

受け入れられた回答で使用される静的メソッドではなく、IMapperのインスタンスメソッドを使用する場合は、次のことを実行できます(AutoMapper 6.2.2でテスト済み)

IMapper _mapper;
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>();
});
_mapper = config.CreateMapper();

Source src = new Source
{
//initialize properties
}

Destination dest = new dest
{
//initialize properties
}
_mapper.Map(src, dest);

destは、共有したsrcのすべてのプロパティ値で更新されます。一意のプロパティの値は変わりません。

関連するソースコードはこちら

2
BobbyA