我如何使用automapper更新另一个对象的属性值而不创建一个新的?
使用接收现有目的地的重载:
Mapper.Map<Source, Destination>(source, destination);
是的,它返回目标对象,但这只是用于其他一些模糊的场景。这是同一个物体。
Mapper.Map<User, User>(user1, user2);
Mapper.Create<User, User>()
如果您希望使用IMapper的实例方法,而不是在接受的答案中使用的静态方法,您可以执行以下操作(在AutoMapper 6.2.2中测试)
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中的所有属性值进行更新。其独特属性的值将保持不变。
dest
src
这里是相关的源代码
这里有两件事需要注意。首先,我们不必为泛型map调用指定要映射到的类型。这是因为,现在我们正在传递目标对象实例,因此目标类型可以由该对象的类型确定。其次,我们没有将此调用的结果存储在变量中。这是因为目标对象被映射到合适的位置,并且我们没有创建任何新实例。
AutoMapper.Mapper.Map(sourceObject, destinationObject);