我正在使用带有存储库和工作单元模式的EF Core 2.0。处理所有数据库异常的最佳方法是什么?我可以在提交方法中使用try / catch吗?
public void Commit()
{
try
{
_context.SaveChanges();
}
catch (Exception ex)
{
//code
}
}
SaveChanges()
以外的任何内容都可以引发异常吗?捕获到的异常该怎么办?
答案 0 :(得分:0)
如果您查看SaveChanges documentation,则表明SaveChanges只会抛出两种类型的异常:DbUpdateException
和DbUpdateConcurrencyException
。这些是EF特定的异常,它们的内部异常将包含提供者特定的异常。
因此,您至少应该明确地捕获这些错误,但是如何处理取决于您自己……您绝对应该至少将错误记录在某个地方。通用异常捕获块仅应用于真正意想不到的情况,但是诸如网络中断之类的事情并不是真正意想不到的。
要记住的另一个例外是DbUpdateException,它是由EF提供程序(SqlServer,DB2等...)实现的抽象类,根据我的见解,它将被抛出BeginTransaction
,Commit
等方法,因此也可以处理该方法。很容易忘记,如果连接断开,这些其他方法也会引发异常,而不仅仅是SaveChanges。