C# DbContext.SaveChangesSync异常处理
在Visual Studio 2013中,当使用异步操作和实体框架支持构建一个新的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; }
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发送。