2017-06-06 59 views
0

我正在使用C#和EF来处理SQL Server数据库。在C中使用实体框架进行多个查询#

我需要一次做几个查询。现在我正在一起做所有的操作,最后我打电话DbContext.SaveChanges函数一次性应用所有更改。

我的问题是,如果其中一个查询有错误,所有查询都将被取消。

我是否需要为每个查询调用DbContext.SaveChanges

感谢

+2

也许最好是使用交易?发生错误时,事务中的所有内容都会回滚并且不会损坏数据? –

+0

https://stackoverflow.com/questions/815586/using-transactions-or-savechangesfalse-and-acceptallchanges检查链接 –

+0

就像一个说明,在大多数情况下,这是一件好事。您需要仔细考虑让数据处于意外状态的影响。 – Paddy

回答

2

DBcontext作为UnitOfWork工作。它跟踪当前DBContext中的所有更改,并且当您调用SaveChanges时,会计算出将这些更改写入数据库时​​应完成什么操作。换句话说,这与数据库事务相似。

我是否需要为每个查询调用DbContext.SaveChanges?

这取决于。你需要识别你的UnitOfWork。在Web应用程序中,它通常是“每个请求的DBConstext”。它可能并不完全适合你。确定一组数据库操作应该在一个组中完成,或者应该作为一个组进行失败。然后相应地拨打SaveChanges

对于每个数据库调用调用SaveChanges可能效率不高。您忽略了ORM的其他重要功能,在这种情况下这些功能不会有帮助。花点时间来确定你的UnitOfWork。

+0

我得到一个json包含需要插入到数据库的对象数组。 \t 为每个查询访问数据库效率不高吗? – amichai

+0

IMO,数组中的所有项目都应插入数据库中的单个组中。如果出现错误,请提前验证数据。 –

+0

验证我需要访问数据库来检查现有数据的数据,但错误非常罕见,我更愿意丢失有缺陷的对象。 – amichai

0

是的,你可以调用每个查询后DBcontext.SaveChanges成功运行查询。如果你的查询有错误,所以剩下的工作将被保存,并且如果没有依赖性,请尝试将你的错误查询置于 执行结束。

+0

这样做效率不高吗? – amichai

+0

因此修复错误并仅使用一次。 –

1

如果你不需要事务,那么你需要为每个查询调用DbContext.SaveChanges。