EF6中Include函数对同一关联实体的查询次数疑问
EF6中Include函数的查询执行逻辑
针对你提到的场景,当执行这段代码时:
Son son = context.Sons.Where(x => ids.Contains(x.id)) .Include(x => x.Father) .Include(x => x.Father.Brother) .FirstOrDefault();
EF6只会生成一次SQL查询,不会为每个子实体分别执行查询。
具体逻辑如下:
- Include的本质是通过SQL JOIN操作,将关联实体的数据一次性加载到查询结果中,不管有多少个子实体关联同一个父实体,EF6都会在单个查询中完成所有关联数据的获取。
- 即使多个Son实例指向同一个FatherABC实体,EF6的上下文会自动处理实体的重复引用,不会重复创建FatherABC对象,而是将所有关联的Son实例指向内存中同一个FatherABC实例,同时其关联的Brother实体也会被一次性加载。
简言之,无论关联的父实体是否重复,Include指定的导航属性都会通过单次查询完成数据加载,不会产生多次查询的情况。
内容的提问来源于stack exchange,提问作者sgch
相关产品推荐
相关产品推荐

