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

时间:2016-11-16 13:21:06

标签: 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();

2 个答案:

答案 0 :(得分:2)

对内部监控实体的更改,因此只要您没有告诉实体框架跳过更改跟踪(例如在查询中使用AsNotracking()),就不会丢失任何更改

答案 1 :(得分:2)

当我们处理foreach循环时,你所采取的方式是正确的方法。你也可以在循环中做同样的事情。但是它会降低性能。操作很重。所以SaveChanges()循环之后总是foreachSaveChanges()方法会对附加到它的所有实体进行修改。所以你不必担心参考改变等等。它作为工作单元工作。这意味着要么全部保存,要么不保存。

注意: SaveChanges()在交易中运作。如果无法保留任何脏SaveChanges()对象,ObjectStateEntry将回滚该事务并抛出异常。