上下文: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;调试器在删除之前显示正确的对象 - 在表读取或访问另一页之前,所有内容都显示正常。
我怀疑锁不会被释放,但是不同表中的其他对象使用完全相同的逻辑成功删除。我不确定下一步哪个好看 - 任何想法都非常适合!
答案 0 :(得分: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
仍然不确定为什么它在没有交易的情况下工作,但其他删除