AutoMapper - Почему он перезаписывает весь объект?

Я не понимаю, почему это переписывает весь мой объект. Причина в том, что я получаю 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);
}

1 ответ

Решение

Mapper.Map имеет перегрузку, которая принимает исходный и целевой объект. В этом случае Automapper будет использовать заданный объект назначения и не будет создавать новый объект.

Так что вам нужно переписать свой Mapper.Map чтобы:

Mapper.Map<UserPut, User>(userPut, user);
Другие вопросы по тегам