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

时间:2010-08-30 23:47:21

标签: linq linq-to-sql datacontext

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

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

但是,在第二次调用时,该方法返回的对象与第一次调用中返回的对象相同。就好像LINQ运行了存储过程但是完全忽略了结果,而是决定数据自第一次运行以来就没有变化,所以它也可以返回它发生的原始对象的副本坚持下去!

我已经尝试在调用my方法之前立即将datacontext的ObjectTrackingEnabled设置为false,但这使我无法引用相关对象。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

  

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

不要在不同的页面请求之间共享datacontexts。

相关问题