SaveChanges
会保存所有债务变更吗?或者只是最后因为它丢失了参考因为我在每个循环中改变元素债务?
List<DTO.ClientDebt> ClientDebtList = Business.Generic.GetAll<DTO.ClientDebt>();
foreach (var oClienteDeuda in oClienteDeudaSyncList) //oClienteDeudaSyncList is a list of debts
{
DTO.ClientDebt debt = ClientDebtList.Where(x => x.ClienteId == oClienteDeuda.ClienteId && x.NumeroComprobante == oClienteDeuda.NumeroComprobante).FirstOrDefault();
debt.Active = oClienteDeuda.Active ? 1 : 0;
}
Data.Generic.SaveChanges();
答案 0 :(得分:2)
对内部监控实体的更改,因此只要您没有告诉实体框架跳过更改跟踪(例如在查询中使用AsNotracking()
),就不会丢失任何更改
答案 1 :(得分:2)
当我们处理foreach
循环时,你所采取的方式是正确的方法。你也可以在循环中做同样的事情。但是它会降低性能。操作很重。所以SaveChanges()
循环之后总是foreach
。SaveChanges()
方法会对附加到它的所有实体进行修改。所以你不必担心参考改变等等。它作为工作单元工作。这意味着要么全部保存,要么不保存。
注意: SaveChanges()
在交易中运作。如果无法保留任何脏SaveChanges()
对象,ObjectStateEntry
将回滚该事务并抛出异常。