首页 新闻 会员 周边

lin to sql中为什么实例化DataContext后就会获得所有表中的数据

0
悬赏园豆:50 [已解决问题] 解决于 2010-08-27 22:41

问题补充: 这是实例化后的调试状态. 我只实例化它 不做别的任何操作 他还是全部加载!
On the  Way的主页 On the Way | 初学一级 | 园豆:10
提问于:2010-08-27 14:18
< >
分享
最佳答案
0

你如何知道 new SqlWarehouseDataContext() 的时候,它就获得所有表的数据了呢?

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2010-08-27 14:34
因为我调试时发现的 你可以看上图 刚才图太宽了 你可能没看到
On the Way | 园豆:10 (初学一级) | 2010-08-27 14:50
@On the Way:你要是不去查看,它就不会加载所有表的数据,因为你查看了,所以它才会执行.比如: var results = from a in xxxxxx select a; 如果你不查看 results 的结果,那么实际上 "from a in xxxxxx select a" 是没有执行的,results 中也是没有数据的,可是一旦你 results.ToList()了,或者你点断点,查看 results 变量的值的时候,它就会去执行 "from a in xxxxxx select a".
Launcher | 园豆:45045 (高人七级) | 2010-08-27 15:03
@On the Way:这就是Linq的"延迟加载"模式,也就是说查询表达式的执行时机,取决于你什么时候用到查询结果.具体请参看:http://msdn.microsoft.com/zh-cn/library/bb399393.aspx
Launcher | 园豆:45045 (高人七级) | 2010-08-27 15:05
其他回答(2)
0

创建的时候不会读取数据的,在你SqlData.AddUsers.ToList() 这句后,才会加载数据。断点的位置用“快速监视”看到的SqlData 上下文中对象的数据实际上是临时从数据库取的。

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-27 15:10
我只实例化它 不做别的任何操作 他还是全部加载!
支持(0) 反对(0) On the Way | 园豆:10 (初学一级) | 2010-08-27 15:36
@On the Way:都跟你说了,你做了操作了,你查看了 DataContext 实例的值,你具体查看 DataContext 实例下的某个属性,那么这个属性就会继续执行和该属性绑定的查询表达式.不是说非要你代码里写才叫操作,你调试的时候查看变量值,它也会执行.
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-08-27 15:39
嗯, 对, 你查看的时候,他就已经读数据库了。
支持(0) 反对(0) HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-27 16:47
0

你去看下LINQ TO SQL 里面的函数,你就明白。

假如我们查询一张用户表:

上下文是:DataContext context=new DataContext();

   var query = context.GetTable<User>().Select(e=>e); //这里还没有做查询数据的

   return query.ToList();这里才真正的做了数据库查询操作。

love_99 | 园豆:325 (菜鸟二级) | 2010-08-27 16:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册