asp.net - 如何确认异步 EF6 wait db.SaveChangesAsync() 是否按预期工作?

标签 asp.net asynchronous asp.net-web-api2

我的代码如下所示:

    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()

Return Value Type: System.Threading.Tasks.Task A task that represents the asynchronous save operation. The task result contains the number of objects written to the underlying database.

检查结果是否大于0:

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

More info here

另一种选择是用 try ... catch block 包装它:

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

关于asp.net - 如何确认异步 EF6 wait db.SaveChangesAsync() 是否按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427473/

相关文章:

asp.net - Windows Azure 上的简单文件上传

asp.net - 如何将trace.axd导出到文件

c# - 来自 Asp.Net Web Api 异步/任务调用的正确堆栈跟踪

c# - 登录时Web API多重身份验证

c# - 业务对象方法

javascript - 将页面上的多个 html 表保存为 CSV

asp.net - 将 ASP.NET 文本框呈现为 HTML5 输入类型 "Number"

javascript - 两个异步函数完成后的回调

ios - Obj-C 异步基础 - 在这种简单的情况下该怎么做?

javascript - 数据没有插入数组nodejs