オートマッパーを使用して、新しいオブジェクトを作成せずに別のオブジェクトのプロパティ値を更新するにはどうすればよいですか?
既存の宛先を取得するオーバーロードを使用します。
Mapper.Map<Source, Destination>(source, destination);
はい、宛先オブジェクトを返しますが、それは他の不明瞭なシナリオのためのものです。同じオブジェクトです。
これを機能させるには、ソースとデスティネーションのタイプが同じであってもCreateMapする必要があります。つまり、Mapper.Map<User, User>(user1, user2);
したい場合は、このようなマップを作成する必要がありますMapper.Create<User, User>()
受け入れられた回答で使用される静的メソッドではなく、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
のすべてのプロパティ値で更新されます。一意のプロパティの値は変わりません。