代码之家  ›  专栏  ›  技术社区  ›  Laurence

linq to sql-第二次运行的方法不会返回自第一次以来发生的数据更改

  •  0
  • Laurence  · 技术社区  · 15 年前

    我在数据上下文中创建了一个映射到SQL存储过程的方法。该方法在ASP.NET应用程序中使用,在页面的生命周期中调用两次。在这两种情况下,它返回相同的单个对象(即相同的主键)。

    在第一次调用之后,进行了一些数据更改,因此在第二次调用时,存储过程返回相同的记录,但具有不同的属性值。如果我使用调试器和SQL事件探查器,我可以绝对地验证正在返回的记录在第一次和第二次调用之间是否具有相同的pk,但属性值不同。

    但是,在第二次调用时,方法返回的对象与第一次调用返回的对象相同。这就好像Linq已经运行了存储过程,但却完全忽略了结果,而是决定自第一次运行数据以来,数据不可能发生更改,因此它还可以返回一个它碰巧挂起的原始对象的副本!

    在调用我的方法之前,我曾尝试将DataContext的ObjectTrackingEnabled设置为false,但这使我无法引用相关的对象。

    下面是我用来调用方法的代码:

    Dim stl = _DataContext.GetMyStatus(SelectedUserID)
    Dim st As MyStatus= stl.FirstOrDefault
    

    我真的需要能够在页面的生命周期中多次调用这个方法,并且使它能够准确地反映数据库的当前状态,那么我该怎么做呢?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Amy B    15 年前

    DataContext为每个主键值生成一个实例。它在第一次看到记录时填充这个单一实例,然后为将来任何具有该键的请求返回该实例。

    如果要从数据库更新现有实例的值,请使用刷新方法。

    我真的需要能够在页面的生命周期中多次调用这个方法,并且使它能够准确地反映数据库的当前状态。

    不要在不同的页面请求之间共享数据上下文。