添加到数据库但SaveChanges的实体处理项失败

时间:2015-12-02 19:30:50

标签: c# entity-framework entity-framework-6

当SaveChanges失败时,您将如何处理或清除添加到数据库的项目。

实施例

db.MyTable.Add(MyModel);
db.SaveChanges();

如果db.SaveChanges()失败,db.MyTable.Add(MyModel)添加的数据会发生什么?

我是否需要清除这些添加的项目?如果是这样的话?

当服务尝试更新我可能已手动删除的项目时,它会抛出一个约束问题。

似乎我有人需要撤消在此问题之后添加的这些项目,因此他们不会一遍又一遍地尝试添加同样的错误,因为它会做出同样的错误。

1 个答案:

答案 0 :(得分:1)

您可以将 (format t "~&~@(~{~a~^ ~}~)" '(violets are blue)) Violets are blue 电话打包到SaveChanges()块内:

try...catch

上面的代码检查导致错误的try { db.SaveChanges(); } catch (DbEntityValidationException ex) { foreach (DbEntityValidationResult item in ex.EntityValidationErrors) { DbEntityEntry entry = item.Entry; //... // Rollback changes switch (entry.State) { case EntityState.Added: entry.State = EntityState.Detached; break; case EntityState.Modified: entry.CurrentValues.SetValues(entry.OriginalValues); entry.State = EntityState.Unchanged; break; case EntityState.Deleted: entry.State = EntityState.Unchanged; break; } } } 的{​​{1}}属性。如果当前状态为“已添加”,则会将其更改为“已分离”。  或者只是覆盖它。

或者你可以覆盖State电话并做同样的事情。