LinqToSql 查询执行时机

LinqToSql query execution timing

我想问一下LinqToSql查询的执行时间。
根据我的理解参考这个MSDN blog,似乎LinqToSql查询只会在1时执行。IQu​​eryable的属性被访问
2. IQueryable 的函数(不返回 IQueryable / IEnumeration 类型)被调用

不过,我做了一个这样的实验:

var ents = from ent in dal.ents
           select ent;

string s1 = ents.first().Value1;   // I got 1 here
Console.ReadLine();    // When the system is waiting for my input. I change the same record manually in DB, I change Value2 of ent from 2 to 3 here. 
string s2 = ents.first().Value2    // I got 2 here.

我的问题是:为什么我的 s2 仍然是“2”!!!!!!!!!!!!!!!!!!????????? ???

据我了解,ents.first().Value2 应该再次连接到数据库并获取新的 Value2。为什么我仍然得到旧值?

在此先感谢所有对我的问题感兴趣的人。

一旦您在此行获得 Value1,就会调用数据库

string s1 = ents.first().Value1;

然后它将对象保存在内存中(连同 Value2)。当您尝试访问 Value2 时,它不会再次调用数据库。

终于,我想我找到了背后的工作负责人。 L2S 真的很像

LinqToSql query will only CONNECTION TO DB AND EXECUTE when

  1. IQueryable's property being accessed
  2. IQueryable's function (which is not returning IQueryable / IEnumeration type) being called

但另外,L2S后,每条记录第一时间从数据库中取数据。它将通过其 PK 缓存记录。

最终,在每次进一步提取时。它将检查之前是否已提取记录。

  1. 是的,它将使用记录的缓存版本而不是数据库版本。
  2. 如果没有,它将使用数据库版本。

P.S。缓存记录的生命周期将持续到 DBContext 被释放。