实体框架 - 循环然后调用 SaveChanges

Dan*_*tti 5 c# entity-framework

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();
Run Code Online (Sandbox Code Playgroud)

Sam*_*ath 3

当我们处理循环时,您所做的方法是正确的方法。您foreach也可以在循环内执行相同的操作。但这会严重降低操作的性能。因此请始终在循环SaveChanges()之后执行foreachSaveChanges()方法会保留对附加到它的所有实体所做的修改。因此您无需担心引用更改等。它作为工作单元工作。这意味着要么保存全部,要么不保存。

注意: SaveChanges()在事务中操作。如果任何脏对象无法持久化,SaveChanges()将回滚该事务并抛出异常。ObjectStateEntry