搜索
bottom↓
回复: 5

使用C#对Entity Framework中延迟加载的一点疑惑,求解惑

[复制链接]

出0入4汤圆

发表于 2020-9-30 12:41:42 | 显示全部楼层 |阅读模式
用EF6查询数据库的数据,查询的结果跟预想的不一样。数据库结构很简单,数据类型全是int。然后查询两次,分别使用不同的关键字进行查询,得出的查询结果是一样的,第二次查询把第一次查询的结果覆盖了。查询的代码如图,但是如果使用图中注释掉的代码进行查询的话,就不会发生覆盖的情况。在调试的时候也能发现这一点,使用不注释的代码进行调试,发现第一次查询的结果枚举出来是正常的,但是第二次查询以后再枚举结果就发现第一次的结果就不对了。这个应该是跟EF的延迟加载有关系,但是我理解延迟加载至少应该把查询表达式给记录下来吧,怎么会在查询的时候重新生成表达式吗?这样的话有点担心之前的代码会出现类似的问题啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入20汤圆

发表于 2020-9-30 14:24:39 | 显示全部楼层
目测是Linq语句中的变量作用域问题,讲实话我自己几乎没有用过这种写法,都是完全的面向对象的用linq的各种扩展方法,我没有遇到过这种情况.

你把下面的st改成st2试试看~

出0入4汤圆

 楼主| 发表于 2020-9-30 14:38:36 | 显示全部楼层
本帖最后由 thepresent 于 2020-9-30 14:49 编辑
Error.Dan 发表于 2020-9-30 14:24
目测是Linq语句中的变量作用域问题,讲实话我自己几乎没有用过这种写法,都是完全的面向对象的用linq的各种扩 ...

我这样写是因为查询之后要判断是否为null,然后要赋值给GridView的数据源。
我也改成了st2试了,不行。
另外,你说的linq是下面这样吗?这样用也不行啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入20汤圆

发表于 2020-9-30 16:44:14 | 显示全部楼层
thepresent 发表于 2020-9-30 14:38
我这样写是因为查询之后要判断是否为null,然后要赋值给GridView的数据源。
我也改成了st2试了,不行。
另 ...

你这样写是不对的,你这个step1和step2就不是一个具体的,已经有确定值的对象,具体是啥我也不知道,如果在用VS的话,可以看看step变量的类型.最起码你需要在where做完查询以后有一个显式的返回对象的动作.
我的测试代码:

返回的结果:


其实这里如果是简单查询直接First(p=>p.id = id)就可以了~

还有就是作用域的问题,作为理论不及格派的程序员,这种带括号的写法我觉得更清楚一点,特别是作用域什么的,因为C#在底层还是做了非常多的事情,什么时候装箱什么时候重用有时候是不太明显的,所以和写C一样,不确定就加括号~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入16汤圆

发表于 2020-9-30 18:43:55 | 显示全部楼层
我会这样写。

int id=1;
var steps1=tdb.testYC.Where(p=>v.id==id).firstordefault();
id=2;
var steps2=tdb.testYC.Where(p=>v.id==id).firstordefault();

出0入4汤圆

 楼主| 发表于 2020-10-1 08:45:35 | 显示全部楼层
使用EF的源码调试了以下,发现在生成表达式的时候确实还没有把id的值取出来。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 22:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表