AutoMapper-为什么覆盖整个对象

本文关键字:对象 覆盖 为什么 AutoMapper- | 更新日期: 2023-09-27 18:27:04

我不明白为什么它会覆盖我的整个对象。原因是我从数据库中获得了User对象,我想从DTO中分配新的值。它不是只添加这些新值,而是创建一个具有新值但所有先前值都设置为null的新对象。

在这种情况下,我如何确保他会"升级"我的对象,而不是创建新对象?

场景

/users/{id}-输入

// User has id, username, fullname
// UserPut has fullname
public HttpResponseMessage Put(int id, UserPut userPut)
{
    var user = _db.Users.SingleOrDefault(x => x.Id == id); // filled with properties
    Mapper.CreateMap<UserPut, User>();
    user = Mapper.Map<User>(userPut); // now it has only "fullname", everything else set to null
    // I can't save it to db because everything is set to null except "fullname"
    return Request.CreateResponse(HttpStatusCode.OK, user);
}

AutoMapper-为什么覆盖整个对象

Mapper.Map有一个重载,它接受一个源对象和一个目标对象。在这种情况下,Automapper将使用给定的目标对象,而不会创建新对象。

因此,您需要将Mapper.Map重写为:

Mapper.Map<UserPut, User>(userPut, user);