2016-09-19 15 views
2

恰好实体框架的DbContext和什么的SaveChanges过程中发生错误后regisered实体()(例如索引禁止重复行或超时)之后。它们仍然可用,或者它们处于Inconsistant状态,应该扔掉吗?是的DbContext安全使用数据库出错

+0

看到这个:https://msdn.microsoft.com/en-us/data/jj729737.aspx – Sampath

回答

1

它们仍然可以提供你解决原来的错误。如果超时,您可以再试一次,但如果它是索引错误,则问题需要解决,因为调用SaveChanges将启动新的事务并尝试保存您所做的任何更改。如果一次更改失败,则整个事务会回滚。

没有得到一个新的,虽然要取决于你的架构重新使用上下文的机会。

举例来说,如果你不喜欢的东西:

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

我希望相应的错误处理要到位,这样的背景下被关闭(因为这将是击中using结束时)和并显示错误,以便上下文不应该可用。

编辑

至于评论,有一个单一的背景下开放的很长一段时间是不可取的。 SQL服务器是它自己的连接池,它控制打开和关闭连接,所以当你需要时打开一个上下文并不慢。这也可以更好地控制错误。

+1

这是一个桌面应用程序,我们使用每个窗口一个上下文,所以上下文生活相当长 – Thomas

+2

基于研究我已经处理了这个问题,长时间的开放是一个不好的模式。只要你需要,你只应该打开一个上下文。 – webnoob