我们遇到了在实体之间导航的问题,其中之一基于视图。 问题是,当我们去实体框架 - 视图中的数据加载过多
TableEntity.ViewEntity.Where(x => x.Id == Id).FirstOrDefault())
在后台被加载在其中不是我们想要的或希望的视图中的所有记录。
然而,当我们去
_objectContext.TableEntityView
.Where(x => x.TableObjectId == TableObjectId && x.Id == Id)
那么它只是加载了一排是我们所使用的导航属性期待
总之什么原因导致大量的数据负载 - 它就像查询早日实现。
我们将EF 4与SQL 2005数据库结合使用。这些视图用于提供汇总的信息,如果没有大数据负载(具有讽刺意味的),EF无法轻松完成。我们手动构建了1:视图之间的许多关联。
为什么我们会在第一个实例中获得大数据负载,而不是第二个?
非常感谢所有/任何帮助
感谢@Adam Rackis。但是,如果我去Table1.Table2.Where(x => x.Id == Id),它肯定不会加载表2中的所有内容。我的理解是,因为它是IQueryable而不是IEnumerable,因此它将所有内容都一次性发送到服务器 - 当您意识到查询(即使用ToList())时触发。否则,导航属性在EF中不可用。 –
是的,你是对的。导航属性不是IQueryable。开箱即用的行为对于大多数情况来说可能是最好的。如果你需要更细粒度的控制,也许NH对你来说会是一个更好的ORM? (这是来自巨大的EF粉丝,顺便说一句) –
@Tim,也见我的编辑。这可能是使用DbContext的可能,但仍然不可能通过犁过对象导航属性 –