Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DbContext.SaveChangesSync异常处理_C#_Asp.net_Entity Framework_Exception_Asp.net Web Api - Fatal编程技术网

C# DbContext.SaveChangesSync异常处理

C# DbContext.SaveChangesSync异常处理,c#,asp.net,entity-framework,exception,asp.net-web-api,C#,Asp.net,Entity Framework,Exception,Asp.net Web Api,在Visual Studio 2013中,当使用异步操作和实体框架支持构建一个新的ApiController时,一些方法将调用包装在try-catch块中 比如说Put方法, try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!EmployeeExists(id)) { return NotFound(); } throw; }

在Visual Studio 2013中,当使用异步操作和实体框架支持构建一个新的
ApiController
时,一些方法将调用包装在
try-catch
块中

比如说Put方法,

try
{
    await db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
    if (!EmployeeExists(id))
    {
        return NotFound();
    }
    throw;
}
msdn.microsoft.com关于
DbUpdateConcurrencyException

DbContext引发的异常,该异常预期实体的SaveChanges会导致数据库更新,但实际上数据库中的任何行都不会受到影响

DbUpdateeCurrencyException
是从
DbUpdateException
派生的,还有一些其他异常可以从
DbContext.saveChangesSync
方法引发


我想知道为什么这些没有捕获条款?是为了简洁吗?或者它们根本不属于应用程序中的这个级别吗?

Web API脚手架控制器遵循REST语义,因此PUT实际上是记录的更新

MSDN消息指出,如果记录未更新,将引发异常,因此在这种情况下,如果记录更新失败,将引发异常。 如果记录不存在,则返回404 not found


总之,尽管数据库引发了异常,但它可能是REST服务上下文中的有效情况(由于记录不存在而未执行更新),而不是真正的错误。其他例外情况将向客户反映。

我知道这很旧,但这是我的问题。这种方法似乎是使用框架异常处理,它将自动处理异常。这意味着您希望异常是…异常的,它们会自动记录,并将响应作为一些默认的ObjectResult发送。