Entity framework 实体框架代码优先:查询多对多导航属性而不加载到内存中
我想知道在不首先将所有关系对象加载到内存中的情况下查询多对多关系的最佳方法 例如,类别和文章具有多对多关系。这意味着我的Category类具有(延迟加载的)导航属性,如下所示: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检查之前将所有相关文章加载到内存中 是否可以在不将相
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);