C#-实体框架-包含过多数据的视图
作者:互联网
我们在实体之间导航时遇到问题,其中一个实体是基于视图的.
问题是我们什么时候去
TableEntity.ViewEntity.Where(x => x.Id == Id).FirstOrDefault())
在后台,它正在加载视图中的所有记录,这不是我们想要或期望的.
但是当我们走
_objectContext.TableEntityView
.Where(x => x.TableObjectId == TableObjectId && x.Id == Id)
然后,它只加载了我们期望的一行
简而言之,使用导航属性会导致海量数据加载-就像查询早日实现一样.
我们将EF 4与SQL 2005数据库一起使用.这些视图用于提供汇总信息,如果没有大数据负载,EF很难做到这一点(具有讽刺意味的).我们手动构建了1:视图之间的许多关联.
为什么然后在第一个实例中却却获得了大数据负载呢?
非常感谢您提供的所有帮助
解决方法:
这就是导航集合在EF中的工作方式:访问集合会加载所有实体,并且您随后运行的任何linq查询都只需查询内存中的对象即可.我不认为除了您已经做过的自定义查询之外,您无能为力.
FWIW我被告知NHibernate支持更多细粒度的导航负载,但是该功能尚未进入Entity Framework.
编辑
Ladislav Mrnka的This answer显示了从CTP时代开始可能解决的问题.从那以后不确定是否有任何变化.它使用DbContext,因此您仍然无法仅浏览Navigation属性,但是它可能与您将要获得的距离很近.
int count = context.Entry(myAccount)
.Collection(a => a.Orders).Query().Count();`
或者对于你的情况,我猜是
TableEntityView obj = context.Entry(TableEntity)
.Collection(a => a.ViewEntity)
.Query().FirstOrDefault(x => x.Id == Id);
标签:sql-server-2005,views,c,entity-framework 来源: https://codeday.me/bug/20191202/2085548.html