【问题标题】:Is DbContext safe to use after a database error occured发生数据库错误后使用 DbContext 是否安全
【发布时间】:2016-09-19 08:39:55
【问题描述】:

在 SaveChanges() 期间发生错误后,实体框架 DbContext 和注册实体会发生什么(例如,索引禁止重复行或超时)。它们是否仍然可用,或者它们是否处于不一致状态并且应该被丢弃?

【问题讨论】:

标签: c# .net entity-framework entity-framework-6


【解决方案1】:

只要您修复了原始错误,它们仍然可以使用。如果超时,您可以再试一次,但如果它类似于索引错误,那么问题需要解决,因为调用 SaveChanges 将启动一个新事务并尝试保存您所做的任何更改。如果一次更改失败,则整个事务回滚。

在不获取新上下文的情况下重复使用上下文的机会取决于您的架构。

例如,如果您执行以下操作:

using (var context = GetContext())
{
    //do something that goes wrong
}

我希望适当的错误处理到位,以便关闭上下文(就像在到达 using 末尾时一样)并显示错误,以便无论如何上下文都不应该可用。

编辑

对于 cmets,不建议长时间打开单个上下文。 SQL Server 有自己的连接池,它控制打开和关闭连接,因此在需要时打开上下文并不慢。这也可以更好地控制错误。

【讨论】:

  • 它是一个桌面应用程序,我们每个窗口使用一个上下文,因此上下文的寿命很长
  • 根据我对此事所做的研究,长时间打开一个上下文是一个糟糕的模型。只要您需要,您应该只打开一个上下文。
猜你喜欢
  • 2021-06-14
  • 2011-06-20
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2012-12-24
  • 2021-07-29
相关资源
最近更新 更多