Entity Framework несколько удаляет + обновления "уже отслеживаются - PullRequest
1 голос
/ 20 марта 2020

Вот мой код:

public async Task<int> UpdateTransport(int transportId, TransportForUpdateDto transportDto)
{
    var transportCheck = await _context.Transport
        .Where(t => t.TransportId == transportId)
        .Include(t => t.Loadings)
        .Include(t => t.Deliveries)
        .AsNoTracking()
        .FirstOrDefaultAsync();

    var loadingsToDelete = transportCheck.Loadings.Where(tc => !transportDto.Loadings.Any(l => l.LoadingId == tc.LoadingId)).ToList();
    var deliveriesToDelete = transportCheck.Deliveries.Where(tc => !transportDto.Deliveries.Any(d => d.DeliveryId == tc.DeliveryId)).ToList();

    _context.Loading.RemoveRange(loadingsToDelete);
    await _context.SaveChangesAsync();

    _context.Delivery.RemoveRange(deliveriesToDelete);
    await _context.SaveChangesAsync();

    var transport = await _context.Set<Transport>().Where(t => t.TransportId == transportId).FirstOrDefaultAsync();

    _mapper.Map(transportDto, transport);

    return await _context.SaveChangesAsync();
}

Все довольно просто. Я просто проверяю, существуют ли объекты в БД в Dto как Поставки и Загрузки. если нет, я удаляю их в базе данных. Проблема в том, что я получил ошибку Entity Framework:

Не удается отследить экземпляр типа сущности «Delivery», поскольку другой экземпляр со значением ключа «{DeliveryId: 19619}» уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа.

Извините за недостаток знаний об Entity Framework ... Я действительно не знаю, как решить свою проблему .

Изменить: После многих попыток я вижу, что я получил ошибку, только если я в первый раз вызываю маршрут в Почтальоне. Следующий вызов в порядке, сущность обновлена ​​правильно. Проблема исходит из последней строки:

return await _context.SaveChangesAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...