Если вы используете Underscore.js , вы можете использовать относительно краткий:
_.object(_.map($('#myform').serializeArray(), _.values))
Это связано с тем, что строки в базе данных не помечены для удаления.
Обновлены только новые или измененные элементы. «Отсутствующие» элементы из коллекции не считаются удаляемыми.
Итак, что вам нужно сделать, это пометить элементы для удаления самостоятельно. Что-то вроде этого:
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();
}