Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架代码优先:查询多对多导航属性而不加载到内存中_Entity Framework_Ef Code First_Entity Framework 4.3 - Fatal编程技术网

Entity framework 实体框架代码优先:查询多对多导航属性而不加载到内存中

Entity framework 实体框架代码优先:查询多对多导航属性而不加载到内存中,entity-framework,ef-code-first,entity-framework-4.3,Entity Framework,Ef Code First,Entity Framework 4.3,我想知道在不首先将所有关系对象加载到内存中的情况下查询多对多关系的最佳方法 例如,类别和文章具有多对多关系。这意味着我的Category类具有(延迟加载的)导航属性,如下所示: class Category { public long Id {get; set;} public ICollection<Articles> Articles {get; set;} } 然而,据我所知,这将在执行IsVisible检查之前将所有相关文章加载到内存中 是否可以在不将相

我想知道在不首先将所有关系对象加载到内存中的情况下查询多对多关系的最佳方法

例如,类别和文章具有多对多关系。这意味着我的Category类具有(延迟加载的)导航属性,如下所示:

class Category
{
     public long Id {get; set;}
     public ICollection<Articles> Articles {get; set;}
}
然而,据我所知,这将在执行IsVisible检查之前将所有相关文章加载到内存中

是否可以在不将相关文章加载到内存的情况下查询它们,即对IQueryable而不是ICollection进行操作?如果这是一对多关系,那么我可以直接查询文章DbSet以实现我的目标,但是多对多关系存储在sql中的链接表中,这意味着我无法使用DbSet查询。手动编写原始sql以查询链接表是我唯一的选择吗?

这里有一种方法:

var visibleArticlesQuery = context.Category.Where(c => c.Id == category.Id)
                                           .SelectMany(c => c.Articles)
                                           .Where(a => a.IsVisible);
例如,还可以使用
Contains
查询文章DbSet

var visibleArticlesQuery = context.Category.Where(c => c.Id == category.Id)
                                           .SelectMany(c => c.Articles)
                                           .Where(a => a.IsVisible);