【发布时间】:2016-09-19 08:39:55
【问题描述】:
在 SaveChanges() 期间发生错误后,实体框架 DbContext 和注册实体会发生什么(例如,索引禁止重复行或超时)。它们是否仍然可用,或者它们是否处于不一致状态并且应该被丢弃?
【问题讨论】:
标签: c# .net entity-framework entity-framework-6
在 SaveChanges() 期间发生错误后,实体框架 DbContext 和注册实体会发生什么(例如,索引禁止重复行或超时)。它们是否仍然可用,或者它们是否处于不一致状态并且应该被丢弃?
【问题讨论】:
标签: c# .net entity-framework entity-framework-6
只要您修复了原始错误,它们仍然可以使用。如果超时,您可以再试一次,但如果它类似于索引错误,那么问题需要解决,因为调用 SaveChanges 将启动一个新事务并尝试保存您所做的任何更改。如果一次更改失败,则整个事务回滚。
在不获取新上下文的情况下重复使用上下文的机会取决于您的架构。
例如,如果您执行以下操作:
using (var context = GetContext())
{
//do something that goes wrong
}
我希望适当的错误处理到位,以便关闭上下文(就像在到达 using 末尾时一样)并显示错误,以便无论如何上下文都不应该可用。
编辑
对于 cmets,不建议长时间打开单个上下文。 SQL Server 有自己的连接池,它控制打开和关闭连接,因此在需要时打开上下文并不慢。这也可以更好地控制错误。
【讨论】: