在 SaveChanges() 期间发生错误(例如,索引禁止重复行或超时)后, Entity Framework DbContext 和注册的实体会发生什么情况。它们是否仍然可用,或者它们是否处于不一致状态并且应该被丢弃?
最佳答案
只要您修复了原始错误,它们仍然可用。如果超时,您可以重试,但如果是索引错误之类的问题,则需要解决此问题,因为调用 SaveChanges
将启动一个新事务并尝试保存您所做的任何更改。如果一个更改失败,则回滚整个事务。
不过,在不获取新上下文的情况下重用上下文的可能性取决于您的架构。
例如,如果你做了类似的事情:
using (var context = GetContext())
{
//do something that goes wrong
}
我希望适当的错误处理到位,以便关闭上下文(就像在 using
结束时那样)并显示错误,这样上下文就不会被关闭无论如何都可用。
编辑
关于评论,长时间打开单个上下文是不可取的。 SQL Server 有自己的连接池,它控制打开和关闭连接,因此在需要时打开上下文并不慢。这也可以更好地控制错误。
关于c# - 发生数据库错误后 DbContext 是否可以安全使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39568793/