Automapper не применяет конфигурацию для нового экземпляра - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть эта конфигурация для автомпера

public class Mapping : Profile
{
    public Mapping()
    {
        CreateMap<User, User>().ForMember(dest => dest.Id, opt => opt.Ignore());
    }
}

Я использую ядро ​​.net, поэтому у моего автозагрузки есть

services.AddAutoMapper();

Мой контроллер с конструктором

public Controller(DbContext dbContext, IMapper mapper)
{
    _dbContext = dbContext;
    _mapper = mapper;
}

Тогда у меня есть код для копирования пользователей. Здесь я пытаюсь сопоставить исключенного пользователя новому экземпляру, кроме свойства Id, и сохранить его в базе данных.

User user = await _dbContext.Users.FindAsync(id);
User newUser = _mapper.Map<User>(user);
await _dbContext.Users.AddAsync(newUser);
await _dbContext.SaveChangesAsync();

Проблема в том, что конфигурация для свойства Id не работает. Я получил newUser с Id существующего пользователя. Почему собственность не игнорируется?

User.cs

public class User
{
    public User()
    {
    }

    public User(string name)
    {
        Name = name;
    }

    public int Id { get; private set; }
    public string Name { get; private set; }
}

UPDATE

Я обнаружил, что этот код работает нормально

var newUser = new User();
_mapper.Map<User, User>(user, newUser);

Но почему я не могу использовать User newUser = _mapper.Map<User>(user);?

Из плана выполнения

$id = .Block(System.Int32 $resolvedValue) {
                    $resolvedValue = .If (
                        $src == null || False
                    ) {
                        .Default(System.Int32)
                    } .Else {
                        $src.Id
                    };
                    $resolvedValue
                };
...