Asp.net

如何確認非同步 EF6 等待 db.SaveChangesAsync() 是否按預期工作?

  • January 12, 2021

我的程式碼如下所示:

   public async Task<IHttpActionResult> Delete(int id)
   {
       var userId = Int32.Parse(User.Identity.GetUserId());   
       UserTest userTest = await db.UserTests.FindAsync(id);
       if (userTest == null)
       {
           return NotFound();
       }
       if (userTest.UserId != userId)
       {
           return Unauthorized();
       }
       db.UserTests.Remove(userTest);
       await db.SaveChangesAsync();
       return Ok();
   }

我認為 db.SaveChangesAsync 之前的所有內容都可以,但是在執行 return Ok() 之前如何確認 db.SaveChangesAsync 是否有效?理想情況下,我認為我應該檢查異常和事物,但我不確定如何將其放入此程式碼塊中。

來自 msdn:

public virtual Task<int> SaveChangesAsync()

返回值 類型:System.Threading.Tasks.Task 表示非同步保存操作的任務。任務結果包含寫入底層數據庫的對像數量。

檢查結果是否大於 0:

if(await db.SaveChangesAsync() > 0)
{
    .....
}

更多資訊在這裡

另一種選擇是用try ... catch塊包裝它:

try
{
   await db.SaveChangesAsync();
   return Ok();
}
catch (Exception ex)
{
   return NotFound(ex.Message);
}

引用自:https://stackoverflow.com/questions/28427473