编程语言
首页 > 编程语言> > C#-实体框架-包含过多数据的视图

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