EF直接查询一张子表的注意事项

项目用到的一个查询,看着再简单不过的查询,没想到居然栽跟头了。

有两张表,一张主表,一张子表【1→多】

EF直接查询一张子表的注意事项_第1张图片

在这里我主要是想对子表操作,之所以加主表,是因为在添加子表数据的时候,可以只用一个主表的对象,然后用上下文添加一次,EF自动开存储过程,自动添加关联子表数据。如果大家有什么好的办法让子表一次添加一千多条数据,请指教。【因为我也不太想这样添加数据

问题就出现在我查询这个子表数据的时候

我的查询语句是这样写的

EF直接查询一张子表的注意事项_第2张图片

然后奇迹出现了,按照我的条件约束,查询出来的数据应该只有一两条数据,但是,查询出的结果却是全部数据,没错是那1千多条数据,都被查出来了。

在这里我走了弯路,我以为是我的where条件写的不对,其实查询条件没写错。【改条件耗了将近2小时】

那么我将直接给出问题的解决思路。

思路是使用SQL Server Profiler查看最终执行的SQL语句是什么

开始→所有程序→Microsoft SQL Server 2008 R2→性能工具→SQL Server Profiler

【打开软件后新建一个跟踪】文件→新建跟踪→用sa账户登录→不需要改设置直接点击【运行】

根据这种方法我查出当我执行这段EF代码的时候,他对数据库进行了三次操作

第一次:返回了我正确的结果,就2条数据

第二次:他根据子表的所有外键值,去找对应的所有主表的数据

第三次:他根据第二次从主表中找到的所有主键值,又去查找对应的子表中的数据【这一次查找,便没有了我最开始的约束条件】

很明显,三次的查询,一定以最后一次为准,给我返回数据,这就是全部的数据。

最后问题解决了,我将EF的查询方法改为如下即可

EF直接查询一张子表的注意事项_第3张图片

所做的改动是 select ,原来直接select ,现在查询部分列了。而现在查询的部分列中不包含外键字段。我想就是因为这个外键吧。

不过这只是猜测,我不知道怎么去验证,求大家意见建议,互相学习共同进步


你可能感兴趣的:(EF,细节问题,c#,entity,framework,sql,server,2008,r2,select,数据库)