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

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

在 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/

相关文章:

c# - c#中使用AFORGE录制视频

.net - 从 Azure 服务上的服务总线处理程序接收事件网格

c# - 这到底有多慢? INotifyPropertyChanged 使用 StackTrace

entity-framework - 使用 EF 在两个数据库之间复制记录

c# - 何时处置 HttpResponseMessage 或 HttpContent

c# - 从字典中获取除 "foreach"之外的键和值

c# - AWS DynamoDB 对象持久化模型 : My class is unsupported, 无法实例化

c# - List<T> RemoveAll() 没有删除项目

.net - .NET 4.5.x 和 .NET Core 之间有什么区别?

c# - Npgsql + Entity Framework + Edmx with column type 位