How can I confirm if an async EF6 await db.SaveChangesAsync() worked as expected?

ぐ巨炮叔叔 提交于 2019-12-10 14:32:39

问题


My code looks like this:

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

I think everything up to the db.SaveChangesAsync is okay but how can I confirm if the db.SaveChangesAsync works before doing a return Ok() ? Ideally I think I should be checking for exceptions and things but I am not sure how I could fit that into this code block.


回答1:


From 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.

Check if the result is greater than 0:

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

More info here

Another option is to wrap this with try ... catch block:

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



回答2:


You can use the following below :)

try {
    int isSaved = await db.SaveChangesAsync();
    if(isSaved > 0){
      // is saved
    }else{
     // is not saved
    }
} catch(e) {
    // handle error here
}



回答3:


I normally use this if it helps:

try
        {
            _context.Events.Add(entity);

            await _context.SaveChangesAsync(cancellationToken);
            return new CommandResult() { IsSuccess = true };
        }
        catch (Exception ex)
        {
            return new CommandResult() { IsSuccess = false,IsError =True, Message=ex.Message };
        }



public class CommandResult
{
    public bool IsSuccess { get; internal set; }
    public bool IsError { get; internal set; }
    public string Message { get; internal set; }
}


来源:https://stackoverflow.com/questions/28427473/how-can-i-confirm-if-an-async-ef6-await-db-savechangesasync-worked-as-expected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!