我有一个使用 EF 5.0 的应用程序。假设我有两个表:
tableA(IDTableA, IDTableB...)
TableB(IDTableB, ...)
当我查询 tableA 的元素时,我可以这样做:
List<TableA> lstResult = myContext.TableA.SQLQuery("select * from TableA").ToList();
但是,在这种情况下,TableA 类型的实体中的集合 TableA.TableA 未填充,为空,因此我需要执行其他查询:
1.- 将 lstResult 中我的实体的所有 ID 转换为 ID1、ID2 格式的字符串...我将此字符串命名为 strIDs。
2.- 我做查询:
lst<TableB) lstResult2 = myContext.tableB.SQLQuery("select * from TableB where IDTableB IN(" + strIDs + ")").ToList();
此时,EF 填充表 A 中的集合 IDTableB。
所以这让我做了两个查询。一个获取 TableA 的寄存器,另一个获取 TableB 的寄存器并了解它们之间的关系。
如果 tableA 有很多 FK,那么我需要很多额外的查询,所以我认为这是低效的。
以类似的方式延迟加载 eorks,在我需要信息时执行此附加查询。但是,我不想使用延迟加载,因为我的 dataContext 寿命很短,所以当我返回实体作为查询的结果时,当我尝试获取子记录时,我收到一个错误,指出实体已退出的上下文。
所以其他解决方案是使用视图,但我想知道是否可以填充孩子。
另外,我想使用原始 sql,因为对于我来说动态查询更容易创建查询。
谢谢。