我有两个班级
public class InvoiceRow
{
public int Id { get; set; }
public int InvoiceId { get; set; }
public int ProductId { get; set; }
public virtual Product Product { get; set; }
public int Amount { get; set; }
}
public class Invoice
{
public int Id { get; set; }
private ICollection<InvoiceRow> _rows;
public virtual ICollection<InvoiceRow> Rows => _rows ?? (_rows = new List<InvoiceRow>());
}
我在仓储类中使用Update方法
public void Update(Invoice record)
{
dB.Invoices.Update(record);
dB.SaveChanges();
}
它可以更新行集合中的值并添加新行,但是如果我传递的对象比数据库中的行数少,它不会删除项。最佳方法是什么?
Except
,因为它比较的是对象引用而不是值。也就是说,除非InvoiceRow
实现了IEquatable
接口并重写了Equals
和GetHashCode
方法。或者你可以将一个IEqualityComparer
传递给Except
。或者你可以用.Where(ir => !record.Rows.Any(rr => rr.Id == ir.Id))
替换.Except(record.Rows)
。 - MarredCheese