我正在使用C#和EF来处理SQL Server数据库。在C中使用实体框架进行多个查询#
我需要一次做几个查询。现在我正在一起做所有的操作,最后我打电话DbContext.SaveChanges
函数一次性应用所有更改。
我的问题是,如果其中一个查询有错误,所有查询都将被取消。
我是否需要为每个查询调用DbContext.SaveChanges
?
感谢
我正在使用C#和EF来处理SQL Server数据库。在C中使用实体框架进行多个查询#
我需要一次做几个查询。现在我正在一起做所有的操作,最后我打电话DbContext.SaveChanges
函数一次性应用所有更改。
我的问题是,如果其中一个查询有错误,所有查询都将被取消。
我是否需要为每个查询调用DbContext.SaveChanges
?
感谢
DBcontext
作为UnitOfWork工作。它跟踪当前DBContext中的所有更改,并且当您调用SaveChanges
时,会计算出将这些更改写入数据库时应完成什么操作。换句话说,这与数据库事务相似。
我是否需要为每个查询调用DbContext.SaveChanges?
这取决于。你需要识别你的UnitOfWork。在Web应用程序中,它通常是“每个请求的DBConstext”。它可能并不完全适合你。确定一组数据库操作应该在一个组中完成,或者应该作为一个组进行失败。然后相应地拨打SaveChanges
。
对于每个数据库调用调用SaveChanges
可能效率不高。您忽略了ORM的其他重要功能,在这种情况下这些功能不会有帮助。花点时间来确定你的UnitOfWork。
是的,你可以调用每个查询后DBcontext.SaveChanges成功运行查询。如果你的查询有错误,所以剩下的工作将被保存,并且如果没有依赖性,请尝试将你的错误查询置于 执行结束。
这样做效率不高吗? – amichai
因此修复错误并仅使用一次。 –
如果你不需要事务,那么你需要为每个查询调用DbContext.SaveChanges。
也许最好是使用交易?发生错误时,事务中的所有内容都会回滚并且不会损坏数据? –
https://stackoverflow.com/questions/815586/using-transactions-or-savechangesfalse-and-acceptallchanges检查链接 –
就像一个说明,在大多数情况下,这是一件好事。您需要仔细考虑让数据处于意外状态的影响。 – Paddy