LinqToSql 查询执行时机
LinqToSql query execution timing
我想问一下LinqToSql查询的执行时间。
根据我的理解参考这个MSDN blog,似乎LinqToSql查询只会在1时执行。IQueryable的属性被访问
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
- IQueryable's property being accessed
- IQueryable's function (which is not returning IQueryable / IEnumeration type) being called
但另外,L2S后,每条记录第一时间从数据库中取数据。它将通过其 PK 缓存记录。
最终,在每次进一步提取时。它将检查之前是否已提取记录。
- 是的,它将使用记录的缓存版本而不是数据库版本。
- 如果没有,它将使用数据库版本。
P.S。缓存记录的生命周期将持续到 DBContext 被释放。
我想问一下LinqToSql查询的执行时间。
根据我的理解参考这个MSDN blog,似乎LinqToSql查询只会在1时执行。IQueryable的属性被访问
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
- IQueryable's property being accessed
- IQueryable's function (which is not returning IQueryable / IEnumeration type) being called
但另外,L2S后,每条记录第一时间从数据库中取数据。它将通过其 PK 缓存记录。
最终,在每次进一步提取时。它将检查之前是否已提取记录。
- 是的,它将使用记录的缓存版本而不是数据库版本。
- 如果没有,它将使用数据库版本。
P.S。缓存记录的生命周期将持续到 DBContext 被释放。