Функция IMapper.map () возвращает объект с нулевыми значениями.Автокартер выпуск - PullRequest
0 голосов
/ 23 января 2019

Я кодировал веб-API, хотел сопоставить модель пользователя с моделью UserView. Отладка подтверждает, что mapper.Map (пользователь) возвращает объект с нулевым значением. mapper является экземпляром класса IMapper AutoMapper.

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public UserRole? Role { get; set; }
}

public class UserView
{

    public Guid Id { get; }
    public string Name { get; }
    public string Email { get; }
    public UserRole? Role { get; }
}

public class MappingProfiles : Profile
{
    public MappingProfiles()
    {
        CreateMap<User, UserView>();
    }
}

//In startup.cs
services.AddAutoMapper();

//In user service class.
var userView = _mapper.Map<UserView>(user);

Вывод выглядит следующим образом.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": null,
  "email": null,
  "role": null
}

1 Ответ

0 голосов
/ 23 января 2019

Модель UserView имеет только геттеры. Если вы хотите сохранить их только для чтения, вы можете сделать следующее

Добавить конструктор в UserView

public class UserView
{

   public Guid Id { get;  }
   public string Name{ get; }                                    
   public string Email { get;  }
   public UserRole? Role { get; }

   public UserView(Guid id, string name, string email, UserRole role)
   {
      Id = id;
      Name = name;
      Email = email;
      Role = role;
   }
}

Также настройте профиль отображения

public class MappingProfiles : Profile
{
    public MappingProfiles()
    {
        CreateMap<User, UserView>()
          .ConstructUsing(src => new UserView(src.Id, src.Name, src.Email, src.UserRole));
    }
}

Самый простой способ - добавить сеттеры ко всем свойствам UserView.

...