2

如果我正在做的只是向数据库添加新项目,SaveChanges() 会返回少于添加的数字吗?

例如,如果我添加 5 个新项目,它会在某些错误条件下返回值 3 吗?

基本上,我想确保简单地捕获任何异常就足以进行错误检查。如果没有,检查哪些项目未能添加的最佳方法是什么。

这是一个示例(假设我们为 POCO 使用了一些 Person 类):

db = new Database();
db.People.Add(p1);
db.People.Add(p2);
db.People.Add(p3);
db.People.Add(p4);
db.People.Add(p5);
db.SaveChanges(); //Will this only return 0, 5, or throw an exception or can it return 3??? 
4

3 回答 3

2

是的,DbContext.SaveChanges()如果任何实体无法插入,将引发异常。

返回的计数将与数据库级别受影响的行数相匹配 - 因此,如果行已经存在且未被修改,它将返回更少。如果您纯粹是插入新记录,则检查计数就足够了。

见这里

于 2013-06-07T16:56:45.620 回答
0

您不必担心,如果任何元素无法持久化,则什么都不会持久化。

来自MSDN

SaveChanges 在事务中运行。如果任何脏 ObjectStateEntry 对象无法持久保存,SaveChanges 将回滚该事务并引发异常。

于 2013-06-07T16:56:21.113 回答
0

您需要阅读数据库事务。“根据定义,数据库事务必须是原子的、一致的、隔离的和持久的。” 这意味着如果在事务期间发生错误,所有更改都会回滚。这就是原子的含义...

于 2013-06-07T17:44:21.330 回答