entity-framework - Entity Framework 代码优先 : Querying many to many navigation properties without loading into memory

标签 entity-framework ef-code-first entity-framework-4.3

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

例如,Category 和 Article 是多对多的关系。这意味着我的 Category 类有一个(延迟加载的)导航属性:

class Category
{
     public long Id {get; set;}
     public ICollection<Articles> Articles {get; set;}
}

如果我只想选择可见的文章,我可以像这样查询导航属性:

category.Articles.Where(a => a.IsVisible)

但据我所知,这会在执行 IsVisible 检查之前将所有相关文章加载到内存中。

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

最佳答案

这是一种方法:

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

也可以查询 Article DbSet,例如,使用 Contains

关于entity-framework - Entity Framework 代码优先 : Querying many to many navigation properties without loading into memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047868/

相关文章:

entity-framework - Entity Framework 4.3 Code First 无法创建 Datetime2?

.net - ASP .NET MVC 4 : WebSecurity. CreateUserAndAccount 如何设置 UserId

c# - 第二个模式中的表在实体向导中不可见

entity-framework - ef代码首先种子多对多关系

visual-studio-2012 - Visual Studio 2012 上的 SSDT 损坏然后修复,再次损坏在 VS2013 上也损坏

c# - 如何绕过 "Internal .NET Framework Data Provider error 1025."?

c# - 当数据已在数据库中时 EF 种子不起作用

c# - mvc c#合并两个以上的查询结果

wcf - EF 4.1 Code First - 使用新上下文/WCF 时未更新 FK 值的更改

c# - EFCodeFirst : The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects