Изменения Update в EF Core 7
Изменилось поведение метода Update в EF Core 7.0.2 Ранее можно было можно было изменять связанные сущности связанных сущностей, теперь появляется сообщение об ошибке "The instance of entity type 'MaterialSeparationIncomeItemMap' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked."
Код не менялся и выглядел так:
var curTaskMap = await db.MaterialSeparationTaskMaps
.Include(x => x.MaterialSeparationIncomeMaps)
.ThenInclude(x => x.MaterialSeparationIncomeItemMaps)
.FirstOrDefaultAsync(x => x.Id == task.Id);
curTaskMap.Condition = (int)task.Condition;
var incomeMaps = new List<MaterialSeparationIncomeMap>();
incomeMaps.AddRange(task.MaterialSeparationIncomes.Select(x => new MaterialSeparationIncomeMap()
{
Id = x.Id,
Quantity = x.Quantity,
MetalIncomeId = x.MetalIncomeId,
MaterialSeparationTaskMapId = task.Id,
MaterialSeparationIncomeItemMaps = x.MaterialSeparationIncomeItems.Select(item => new MaterialSeparationIncomeItemMap()
{
Id = item.Id,
Quantity = item.Quantity,
Mass = item.Mass,
MaterialSeparationIncomeMapId = x.Id,
Width = item.Width,
Lenght = item.Lenght
}).ToList()
}));
curTaskMap.MaterialSeparationIncomeMaps = incomeMaps;
db.MaterialSeparationTaskMaps.Update(curTaskMap);
await db.SaveChangesAsync();
При этом если убрать вложенность MaterialSeparationIncomeItemMaps, то сохранение изменений происходит нормально.
На всякий случай добавлю, что это фрагмент из метода Update в репозитории, т.е. сущности есть в БД и имеют свои идентификаторы. На версии 6.0.8 работало без нареканий.
Есть ли какой-нибудь удобный способ для сохранения изменений в подобной вложенности в EF Core 7.0.2 без необходимости писать циклы, вытаскивая конкретную сущность, проверять есть ли она в агрегате, если нет то удалять, если да то изменять и т.д.?