簡體   English   中英

實體處理項已添加到數據庫,但SaveChanges失敗

[英]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;
        }

    }
}

上面的代碼檢查導致錯誤的DbEntityEntryState屬性。 如果添加了當前狀態,則將其更改為“分離”。 或者只是覆蓋它。

或者,您可以重寫SaveChanges()調用並執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM