ASP.NET Core Automapper Entity Framework: не удается обновить объект

При переходе в AccountForUpdateDto моя функция обновления существующего объекта не может быть сохранена в базе данных. Трассировка стека не дает никаких значимых ошибок. Передаваемые dto и id заполнены правильно. Аккаунт из репозитория найден и заполнен.

AccountsController.cs

[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");
}

AutoMapperProfiles.cs

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());
    }
}

Accounts.cs

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; }
}

AccountForUpdateDto.cs

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;
    }
}

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

SBFrancies 23.07.2018 23:20

@SBFrancies, когда я назначаю сопоставленный объект переменной и отлаживаю, он кажется полностью заполненным.

JED 23.07.2018 23:25

Я думаю, вероятно, что проблема в вашем методе SaveAll, а не в сопоставлении - возможно ли это?

SBFrancies 23.07.2018 23:32

Я использую одну и ту же функцию SaveAll во всем приложении. Я просто протестировал его, чтобы убедиться, и я могу успешно создать новую учетную запись. Функция просто выполняет return await _context.SaveChangesAsync() > 0;

JED 23.07.2018 23:35

Хммм, не совсем уверен, что происходит тогда, если только объект, возвращаемый вашим кодом сопоставления, больше не привязан к контексту, но тогда ни одно из ваших сопоставлений не будет работать.

SBFrancies 23.07.2018 23:48

Покажите реализацию GetAccount.

aaron 24.07.2018 02:44

Коллекции очищаются перед отображением. Попробуйте AutoMapper.Collection. Проверьте план выполнения.

Lucian Bargaoanu 24.07.2018 05:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
337
0

Другие вопросы по теме