У меня есть эта конфигурация для автомпера
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
};