处理EF Core 2.0的异常

时间:2018-08-29 07:58:55

标签: c# .net-core entity-framework-core

我正在使用带有存储库和工作单元模式的EF Core 2.0。处理所有数据库异常的最佳方法是什么?我可以在提交方法中使用try / catch吗?

public void Commit()
{
    try
    {
        _context.SaveChanges();
    }
    catch (Exception ex)
    {
         //code
    }
}

SaveChanges()以外的任何内容都可以引发异常吗?捕获到的异常该怎么办?

1 个答案:

答案 0 :(得分:0)

如果您查看SaveChanges documentation,则表明SaveChanges只会抛出两种类型的异常:DbUpdateExceptionDbUpdateConcurrencyException。这些是EF特定的异常,它们的内部异常将包含提供者特定的异常。

因此,您至少应该明确地捕获这些错误,但是如何处理取决于您自己……您绝对应该至少将错误记录在某个地方。通用异常捕获块仅应用于真正意想不到的情况,但是诸如网络中断之类的事情并不是真正意想不到的。

要记住的另一个例外是DbUpdateException,它是由EF提供​​程序(SqlServer,DB2等...)实现的抽象类,根据我的见解,它将被抛出BeginTransactionCommit等方法,因此也可以处理该方法。很容易忘记,如果连接断开,这些其他方法也会引发异常,而不仅仅是SaveChanges。