Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常处理EF Core 2.0_C#_.net Core_Entity Framework Core - Fatal编程技术网

C# 异常处理EF Core 2.0

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()之外的任何内容都会引发异常吗?对于捕获的异常,下一步该怎么办?如果查看,

我将EFCore2.0与存储库和工作单元模式一起使用。处理所有数据库异常的最佳方法是什么?。我可以在提交方法中使用try/catch吗

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实现存储库模式