[英]Entity handling items added to database but SaveChanges fails
當SaveChanges失敗時,您將如何處理或清除添加到數據庫中的項目。
例
db.MyTable.Add(MyModel);
db.SaveChanges();
如果db.SaveChanges()
失敗,那么db.MyTable.Add(MyModel)
添加的數據將db.MyTable.Add(MyModel)
?
我需要清除這些添加的項目嗎? 如果可以,怎么辦?
當服務嘗試更新我可能已手動刪除的項目時,它將引發約束問題。
似乎我有人需要撤消在此問題之后添加的這些項,以便不要一遍又一遍地添加它們,而不會拋出與操作相同的錯誤。
您可以將您的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;
}
}
}
上面的代碼檢查導致錯誤的DbEntityEntry
的State
屬性。 如果添加了當前狀態,則將其更改為“分離”。 或者只是覆蓋它。
或者,您可以重寫SaveChanges()
調用並執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.