我有一个与父母、子女和孙子女的模特,在一个多对多的关系中。使用
this article
我创建了可以正常工作的POCO类,但有一件事我还没弄清楚。
当我直接使用LINQ查询父级或子级时,SQL反映了LINQ查询(A
.Count()
在数据库中执行一个计数,依此类推)-好的。父类具有子属性,可以访问它的子类。但(现在的问题是)这不会暴露
IQueryable
界面,但
ICollection
. 所以当我访问特定父对象的Children属性时
全部的
父母的孩子都被识读了。更糟糕的是,当我接触到孙子孙女时(
theParent.Children.SelectMany(child => child.GrandChildren).Count()
)然后对每个孩子发出一个单独的请求来选择其孙子的所有数据。这是很多单独的查询!
将子属性的类型从ICollection更改为IQueryable并不能解决此问题。除了缺少我需要的方法(如add()和remove())之外,ef当时不识别navigation属性。
是否有正确的方法(如:低数据库交互)通过子级(以及它们是什么)进行查询?或者这是不可能的?