添加时实体框架SaveChanges

时间:2013-06-07 16:48:48

标签: c# .net sql database entity-framework

如果我所做的只是向数据库中添加新项目,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??? 

3 个答案:

答案 0 :(得分:2)

是的,如果任何实体未能插入,DbContext.SaveChanges()将抛出异常。

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

See here

答案 1 :(得分:0)

您不必担心,如果任何元素无法持久存在,则不会保留任何内容。

来自MSDN

  

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

答案 2 :(得分:0)

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