C# Can';t通过从中检索的datacontext删除记录

C# Can';t通过从中检索的datacontext删除记录,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我刚刚升级了应用程序的一个方法,以使用编译查询(不确定这是否相关)。现在,当我运行代码时,会收到相互矛盾的错误消息 这是我的方法: MyClass existing = Queries.MyStaticCompiledQuery(MyRequestScopedDataContext, param1, param2).SingleOrDefault(); if (existing != null) { MyRequestScopedDataContext.MyClasses.Delete

我刚刚升级了应用程序的一个方法,以使用编译查询(不确定这是否相关)。现在,当我运行代码时,会收到相互矛盾的错误消息

这是我的方法:

MyClass existing = Queries.MyStaticCompiledQuery(MyRequestScopedDataContext, param1, param2).SingleOrDefault();

if (existing != null)
{
    MyRequestScopedDataContext.MyClasses.DeleteOnSubmit(existing);
}
当我运行它时,会收到以下消息:

无法删除尚未删除的实体 已附上

请注意,已编译的查询和DeleteOnSubmit引用相同的DataContext。我仍然认为我应该在DeleteOnSubmit之前添加一个attach命令,如下所示:

MyClass existing = Queries.MyStaticCompiledQuery(MyRequestScopedDataContext, param1, param2).SingleOrDefault();

if (existing != null)
{
    MyRequestScopedDataContext.MyClasses.Attach(existing);
    MyRequestScopedDataContext.MyClasses.DeleteOnSubmit(existing);
}
但是。。。当我运行这段代码时,我得到一条完全不同的错误消息:

已尝试连接或删除 添加一个可能不是新的实体 从另一个地方装载的 数据上下文。这是不受支持的

我完全不知所措


其他人是否了解为什么我不能通过从中检索到的相同数据上下文删除记录?

好吧,静态数据上下文听起来已经是一个潜在的问题(特别是线程,但也包括陈旧对象和处置)。我的直接想法是:是否启用了对象跟踪?不确定它是否需要,但肯定要考虑。< /P>这是一个ASP.NET应用程序,我使用静态引用,以便每个请求只创建一个DATACONTY文本实例。我调试以确保在这个例子中这是真的,似乎是这样;“静态”!=“按请求”。static=“每次通话都共享此通话”。在ASP.NET中要非常小心静态。您可能不会在开发人员的机器上注意到太多的痛苦,但是在服务器上?它至少可以扩展到1个用户。它不仅仅是静态的,它由一个专门的类提供服务,确保每个请求只创建一个上下文。我已经进行了彻底的测试,以确保每个请求,尤其是这个工作单元,DataContext只初始化一次。DataContext被意外地存储在HttpContext.Items字典中。所以我猜它不是真的静态的,如果那是一个红色的哈林很抱歉。我修改了示例代码以更准确地反映这一点,好的;我认为最好(最安全的)是假设最坏的情况-P