上下文:Web 应用程序 / ASP.NET 4.0 / EF 4.0 / MSSQLEXPRESS2012
我正在尝试按如下方式进行简单的删除:
if (someObject != null)
{
if (!context.IsAttached(someObject))
context.SomeObjects.Attach(someObject);
context.DeleteObject(someObject);
context.SaveChanges();
}
代码执行没有问题,并且 SaveChanges 返回预期的行数。但是当我之后尝试读取表格时,它会超时(这发生在 mssms 和代码中)。
它似乎还破坏了其他进程,在随后的站点访问中返回“服务器上的 8501 MSDTC 不可用”和“管道的另一端没有进程”。应用程序中发生的三个错误中的哪一个似乎有些随机,但 mssms 中的超时总是会发生。
同一张表上的插入和更新执行没有问题。
除了阅读大量帖子之外,我还尝试将其包装在 try/catch 中并使用 SaveChanges(System.Data.Objects.SaveOptions.None) 和手动 AcceptAllChanges; 进行事务处理;调试器在删除之前显示正确的对象-在读取表或访问另一个页面之前一切正常。
我怀疑锁定没有被释放,但是不同表中的其他对象以完全相同的逻辑成功删除。我不确定接下来最好看哪里 - 任何想法都非常受欢迎!