如果我所做的只是向数据库中添加新项目,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???
答案 0 :(得分:2)
是的,如果任何实体未能插入,DbContext.SaveChanges()
将抛出异常。
返回的计数将与数据库级别受影响的行数相匹配 - 因此,如果行已存在且未被修改,则返回的数量将减少。如果您纯粹插入新记录,则检查计数就足够了。
答案 1 :(得分:0)
您不必担心,如果任何元素无法持久存在,则不会保留任何内容。
来自MSDN
SaveChanges在交易中运作。如果无法保留任何脏的ObjectStateEntry对象,SaveChanges将回滚该事务并抛出异常。
答案 2 :(得分:0)
您需要阅读database transactions。 “根据定义,数据库事务必须是原子的,一致的,隔离的和持久的。”这意味着如果在事务期间发生错误,则回滚所有更改。这就是原子所代表的......