0

我很难弄清楚在哪里捕获实体框架异常。我已经SaveChanges涵盖了并发异常,但是,我很难找到一个通用规则来捕获其他异常(例如由于服务器关闭而导致的超时等)。

我正在做一个 Windows 客户端应用程序,因此异常不能只是吐出“错误”网页,它们必须给出继续应用程序的选项(因为您可能在其中打开了其他窗口,这不是简单的应用程序)。

这在直接使用 ADO.net 时很容易弄清楚:您会在连接打开和查询执行时捕获异常,但是我不太确定何时打开连接和使用 EF4 执行查询(在这种情况下为数据库优先) )。

有一些简单的情况(例如,当我通过IQueryable调用ToListor实际在控制行为(我并不总是控制),它可能会或可能不会实际执行查询(某些控件在稍后调用时执行它)。ToArrayIQueryableDataSourceDataBind

我知道我可以通过反复试验(或只是做try/catch大块)来做到这一点,但我正试图找出一种更通用的方法来做到这一点。

我尝试在 上搜索一些类似onexception事件ObjectContext,但没有在附近找到任何东西,而且我在这件事上找到的所有内容都是关于异常SaveChanges和并发异常,正如我所说,我已经介绍过了。

关于去哪里的任何提示?

4

1 回答 1

0

你熟悉的概念unit of work吗?context这通常定义了 a 何时开始和结束的边界。然后可以将异常处理放置在工作单元中/周围以处理特定异常。

这只是一个想法。

public void Execute(Action<DbContext> action)
{
    try
    {
       using(var context = new MyContext())
       {
           action(context);
           context.SaveChanges();
       }
    }
    catch(ConcurrencyException exception)
    {
    }
    catch(ValidationException exception)
    {
    }
    catch(SqlException exception)
    {
    }
}
于 2012-11-27T19:57:08.720 回答