我使用的是EF Core 2.0和Repository和Unit of Work模式。处理所有数据库异常的最佳方法是什么?我可以在我的commit方法中使用try/catch吗?
public void Commit()
{
try
{
_context.SaveChanges();
}
catch (Exception ex)
{
//code
}
}除了SaveChanges()之外,还有什么东西可以抛出异常吗?下一步如何处理捕获到的异常?
发布于 2020-06-15 20:42:06
如果你看一下SaveChanges documentation,它表明SaveChanges只会抛出两种类型的异常:DbUpdateException和DbUpdateConcurrencyException。这些是特定于EF的异常,其内部异常将包含特定于提供程序的异常。
因此,你至少应该显式地捕捉它们,但如何处理它们取决于你……你至少应该在某一时刻记录下错误。一般的异常捕获块应该只用于真正意想不到的情况,但像网络关闭这样的情况并不是真正意想不到的。
另一个需要记住的例外是DbUpdateException,它是由EF提供程序(SqlServer、DB2等)实现的抽象类。据我所知,它将被BeginTransaction、Commit等方法抛出……所以也许也能处理好这一点。很容易忘记,在连接断开时,这些其他方法也会抛出异常,而不仅仅是SaveChanges。
https://stackoverflow.com/questions/52072388
复制相似问题