Entity Framework Core, удаление элементов из вложенной коллекции

Если вы используете Underscore.js , вы можете использовать относительно краткий:

_.object(_.map($('#myform').serializeArray(), _.values))

1
задан Oleksandr Khytrov 13 July 2018 в 19:40
поделиться

1 ответ

Это связано с тем, что строки в базе данных не помечены для удаления.

Обновлены только новые или измененные элементы. «Отсутствующие» элементы из коллекции не считаются удаляемыми.

Итак, что вам нужно сделать, это пометить элементы для удаления самостоятельно. Что-то вроде этого:

public void Update(Invoice record)
{
    var missingRows = dB.InvoiceRows.Where(i => i.InvoiceId == record.Id)
                        .Except(record.Rows);
    dB.InvoiceRows.RemoveRange(missingRows);

    dB.Invoices.Update(record);
    dB.SaveChanges();
}
2
ответ дан Ruard van Elburg 17 August 2018 в 12:11
поделиться
  • 1
    Это вызывает InvalidOperationException: экземпляр типа «Invoice» не может быть отслежен, потому что уже отслеживается другой экземпляр с тем же ключевым значением для {Id). При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с заданным значением ключа. Подумайте об использовании «DbContextOptionsBuilder.EnableSensitiveDataLogging», чтобы увидеть конфликтующие значения ключей. – Oleksandr Khytrov 15 July 2018 в 14:48
  • 2
    Я нашел причину исключения, мы получаем два экземпляра, которые отслеживаются отдельно. var missingRows = dB.InvoiceRows.Where (i = & gt; i.InvoiceId == record.Id) .Except (record.Rows); dB.InvoiceRows.RemoveRange (missingRows); Таким образом, он работает – Oleksandr Khytrov 15 July 2018 в 17:08
  • 3
    Я обновил ответ с информацией из вашего комментария. – Ruard van Elburg 15 July 2018 в 17:56
Другие вопросы по тегам:

Похожие вопросы: