发生数据库错误后,DbContext是否可以安全使用

时间:2016-09-19 08:39:55

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

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

1 个答案:

答案 0 :(得分:1)

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

重新使用上下文而不获取新上下文的可能性取决于您的架构。

例如,如果你做了类似的事情:

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

我希望有适当的错误处理,以便关闭上下文(就像在using结束时那样)并显示错误,以便上下文不可用反正。

修改

关于评论,长时间打开一个上下文是不可取的。 SQL服务器使用自己的连接池来控制打开和关闭连接,因此只需在需要时打开上下文就不会慢。这样可以更好地控制错误。