0

上下文: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; 进行事务处理;调试器在删除之前显示正确的对象-在读取表或访问另一个页面之前一切正常。

我怀疑锁定没有被释放,但是不同表中的其他对象以完全相同的逻辑成功删除。我不确定接下来最好看哪里 - 任何想法都非常受欢迎!

4

1 回答 1

0

之前必须在交易中犯错 - 以下工作:

var transactionScope = new TransactionScope
                                    (TransactionScopeOption.RequiresNew, 
                                        new TransactionOptions()
                                        {
                                            IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
                                        }
                                    );
        try
        {
            using (transactionScope)
            { ...etc

以下链接详细说明了显式交易的原因 http://blogs.u2u.be/diederik/post/2010/06/29/Transactions-and-Connections-in-Entity-Framework-40.aspx

仍然不确定为什么它在没有其他删除事务的情况下工作

于 2013-08-31T07:21:22.673 回答