При переходе в AccountForUpdateDto моя функция обновления существующего объекта не может быть сохранена в базе данных. Трассировка стека не дает никаких значимых ошибок. Передаваемые dto и id заполнены правильно. Аккаунт из репозитория найден и заполнен.
[HttpPut("{id}")]
public async Task<IActionResult> UpdateAccount(int id, [FromBody] AccountForUpdateDto accountForUpdateDto)
{
var accountFromRepo = await _repo.GetAccount(id);
_mapper.Map(accountForUpdateDto, accountFromRepo);
if (await _repo.SaveAll())
return NoContent();
throw new Exception($"Updating account {id} failed on save");
}
public class AutoMapperProfiles : Profile
{
public AutoMapperProfiles()
{
CreateMap<AccountForUpdateDto, Account>()
.ForMember(a => a.Address, opt => opt.UseDestinationValue())
.ForMember(a => a.UserAccounts, opt => opt.UseDestinationValue())
.ForMember(a => a.Created, opt => opt.UseDestinationValue());
}
}
public class Account
{
public int Id { get; set; }
public string Name { get; set; }
public int PurgeAge { get; set; }
public DateTime CutoffDate { get; set; }
public int Frequency { get; set; }
public Address Address { get; set; }
public DateTime Created { get; set; }
public DateTime LastUpdated { get; set; }
public ICollection<UserAccount> UserAccounts { get; set; }
}
public class AccountForUpdateDto
{
[Required]
public string Name { get; set; }
public int PurgeAge { get; set; }
public DateTime CutoffDate { get; set; }
public int Frequency { get; set; }
public DateTime LastUpdated { get; set; }
public AccountForUpdateDto()
{
LastUpdated = DateTime.Now;
}
}
@SBFrancies, когда я назначаю сопоставленный объект переменной и отлаживаю, он кажется полностью заполненным.
Я думаю, вероятно, что проблема в вашем методе SaveAll, а не в сопоставлении - возможно ли это?
Я использую одну и ту же функцию SaveAll во всем приложении. Я просто протестировал его, чтобы убедиться, и я могу успешно создать новую учетную запись. Функция просто выполняет return await _context.SaveChangesAsync() > 0;
Хммм, не совсем уверен, что происходит тогда, если только объект, возвращаемый вашим кодом сопоставления, больше не привязан к контексту, но тогда ни одно из ваших сопоставлений не будет работать.
Покажите реализацию GetAccount.
Коллекции очищаются перед отображением. Попробуйте AutoMapper.Collection. Проверьте план выполнения.





Это происходит только при обновлении базы данных или _mapper.Map неправильно заполняет вашу сущность?