C# 异常处理EF Core 2.0
我将EFCore2.0与存储库和工作单元模式一起使用。处理所有数据库异常的最佳方法是什么?。我可以在提交方法中使用try/catch吗C# 异常处理EF Core 2.0,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我将EFCore2.0与存储库和工作单元模式一起使用。处理所有数据库异常的最佳方法是什么?。我可以在提交方法中使用try/catch吗 public void Commit() { try { _context.SaveChanges(); } catch (Exception ex) { //code } } 除了SaveChanges()之外的任何内容都会引发异常吗?对于捕获的异常,下一步该怎么办?如果查看,
public void Commit()
{
try
{
_context.SaveChanges();
}
catch (Exception ex)
{
//code
}
}
除了SaveChanges()
之外的任何内容都会引发异常吗?对于捕获的异常,下一步该怎么办?如果查看,它表明SaveChanges只会引发两种类型的异常:DbUpdateException
和DbUpdateConcurrencyException
。这些是特定于EF的异常,它们的内部异常将包含特定于提供者的异常
所以你至少应该明确地抓住它们,但是你如何处理它们取决于你。。。您至少应该在某个时候将错误记录在某个地方。泛型异常捕获块应该只用于真正意外的情况,但是像网络关闭这样的事情并不是真正意外的
要记住的另一个例外是,它是一个抽象类,由EF提供程序(SqlServer、DB2等)实现,据我所知,它将由
BeginTransaction
,Commit
等方法抛出。。。所以也许也能处理好这个问题。很容易忘记,如果连接中断,这些其他方法也会抛出异常,而不仅仅是保存更改。如果在如此低的级别上添加异常处理(尤其是捕获基本异常),您将对自己和可能发生的任何其他异常隐藏可能的db连接问题。首先,EF已经是一种UoW和存储库模式,创建自己的(10次中有9次)是多余的,并且比它的价值更麻烦。一般来说,在异常处理方面,捕获您知道/期望的(以及可以处理的)信息,让其余的都上来吧。没有一刀切的方法如果DbContext实现工作单元模式,DbSet实现存储库模式