Вот мой код:
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();