代码之家  ›  专栏  ›  技术社区  ›  Jonas Stawski

Linq to SQL和MVC的异常行为

  •  -5
  • Jonas Stawski  · 技术社区  · 16 年前

    我有一个操作需要身份验证。action方法使用linq to sql创建一些带有外键的记录。当用户调用操作并登录时,该方法可以毫无问题地工作。当用户未登录时,MVC会使用returnURL参数将其重定向到登录页面。成功登录后,将执行action方法,但这次会引发以下错误:

    已尝试附加或 可能添加一个非新实体 从另一个加载 数据结构。不支持此操作。

    所有查询都在同一个请求上使用同一个DataContext。

    在这两个场景中,代码都经过相同的执行路径,所以我真的不理解发生了什么以及为什么?有人知道为什么会这样吗?

    1 回复  |  直到 16 年前
        1
  •  -4
  •   Jonas Stawski    16 年前

    我发现了问题!

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

    我不想包括代码,因为它太复杂,我不能缩小范围。

    我想下次我得到那个错误的时候,我真的应该相信它。

    现在,我需要了解为什么getCustomerWithCustomerInfo创建新的数据上下文。