Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-循环然后调用SaveChanges_C#_Entity Framework - Fatal编程技术网

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

C# 实体框架-循环然后调用SaveChanges,c#,entity-framework,C#,Entity Framework,SaveChanges是否会保存所有债务变更?或者仅仅是最后一个,因为它丢失了引用,因为我在每个循环中更改了元素债务 List<DTO.ClientDebt> ClientDebtList = Business.Generic.GetAll<DTO.ClientDebt>(); foreach (var oClienteDeuda in oClienteDeudaSyncList) //oClienteDeudaSyncList is a list of debts {

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();
List ClientDebtList=Business.Generic.GetAll();
foreach(oclientedudasynclist中的var oclienteduda)//oclientedudasynclist是一个债务列表
{
DTO.ClientDebt debt=ClientDebtList.Where(x=>x.ClienteId==oClienteDeuda.ClienteId&&x.NumeroComprobante==oClienteDeuda.NumeroComprobante)。FirstOrDefault();
debt.Active=oclienteduda.Active?1:0;
}
Data.Generic.SaveChanges();

对实体的更改是在内部监控的,因此只要您没有告诉实体框架跳过更改跟踪(例如,在查询中使用
AsNotracking()
)当我们处理
foreach
循环时,您所采用的方法是正确的。您也可以在循环内部执行相同的操作。但这会严重降低操作的性能。因此,请始终在
foreach
循环之后执行
SaveChanges()
SaveChanges()
方法保留对附加到它的所有实体所做的修改。因此,您无需担心引用更改等。它作为工作单元工作。这意味着要么全部保存,要么不保存


注意:
SaveChanges()
在事务中运行
SaveChanges()
将回滚该事务,并在任何脏
ObjectStateEntry
对象无法持久化时引发异常。

您提供的代码将更新ClientDebtList中的所有元素,在设置
debt.Active=
…之前,您可能需要添加一个if null检查,或者至少会更新数据库中所有接触的元素。