Asp.net mvc Linq到SQL和MVC的行为非常奇怪

Asp.net mvc Linq到SQL和MVC的行为非常奇怪,asp.net-mvc,linq-to-sql,model-view-controller,asp.net-mvc-2,Asp.net Mvc,Linq To Sql,Model View Controller,Asp.net Mvc 2,我有一个需要验证的操作。操作方法使用Linq to SQL创建一些带有外键的记录。当用户调用该操作并登录时,该方法可以正常工作。当用户未登录时,MVC使用returnUrl参数将其重定向到登录页面。成功登录后,将执行action方法,但这次它抛出以下错误: 已尝试连接或删除 添加一个可能不是新的实体 从另一个地方装载的 数据上下文。这是不受支持的 所有查询都使用相同的datacontext和相同的请求 代码在两种情况下都经过相同的执行路径,所以我真的不明白发生了什么,为什么?有人知道为什么会发生

我有一个需要验证的操作。操作方法使用Linq to SQL创建一些带有外键的记录。当用户调用该操作并登录时,该方法可以正常工作。当用户未登录时,MVC使用returnUrl参数将其重定向到登录页面。成功登录后,将执行action方法,但这次它抛出以下错误:

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

所有查询都使用相同的datacontext和相同的请求

代码在两种情况下都经过相同的执行路径,所以我真的不明白发生了什么,为什么?有人知道为什么会发生这种情况吗?

我发现了问题

操作方法使用全局datacontext检索一些实体,然后调用从会话获取用户对象的基本控制器的用户属性。由于这是用户身份验证后它第一次检索它,因此它调用了我的GetCustomerWithCustomerInfo方法。由于某种原因,该方法确实再次实例化了全局datacontext,因此它使以前检索到的所有实体都成为孤儿,这就解释了我为什么会出现上述错误。这也解释了为什么用户以前登录时我没有收到错误。正在从会话检索用户对象,因此未实例化上下文

我不想包含代码,因为它太复杂了,我无法缩小范围

我想下次我犯了那个错误,我真的应该相信它


现在,我需要找出GetCustomerWithCustomerInfo创建新datacontext的原因。

@jfar,您是否因为没有代码而降级了该问题?@jfar,此外,代码在这里不相关。这里还发生了其他事情,您的datacontext存储在哪里?听起来它可能是一个静态变量。这里的代码是个好主意:-@Malcolm,datacontext不是静态的。请阅读我的答案,了解发生了什么。此外,代码在这里不相关。我第一次看到有人在编程问题上寻求帮助,并说代码不相关。。。这就像你的车坏了就去看牙医一样。唉,我们本应该在没有看到你的代码的情况下神奇地发现你的问题?@jfar,编程不仅仅是代码。我花了很多时间调试这个问题,没有发现任何不同,因此我认为它不相关。我在寻找像静态评论这样的指导。不管怎样,下次你可能想试着帮忙,而不是挖苦别人