entity framework4:多对多关系IQueryable而不是ICollection

大家,早安,

我试图解决我首先遇到的EF代码问题。 我的架构如下

public class Article : IUrlNode { [Key] public Guid ArticleID { get; set; } public string Title { get; set; } public DateTime DateCreated { get; set; } public DateTime DateUpdated { get; set; } public string Summary { get; set; } [System.ComponentModel.DataAnnotations.InverseProperty("CategoryArticles")] public virtual IQueryable ArticleCategories { get; set; } public string FriendlyUrl { get; set; } } [RouteChild("CategoryArticles")] public class Category : ContentNode { public Guid ServiceId { get; set; } [System.ComponentModel.DataAnnotations.InverseProperty("ArticleCategories")] public virtual IQueryable
CategoryArticles { get; set; } }

我已经编写了代码,我可以从数据库中检索一个类别,而实际上并不知道它是一个类别。 从那时起,我必须再次检索该类别的单篇文章而不知道它的文章。 对于类别,我依赖于ContentNode基类和IUrlNode接口上的文章。

类别检索工作正常并且使用单个查询但在我实际获得类别后,我必须使用reflection来获取RouteChild属性指向的导航属性,以找到符合我的条件的单个文章。 问题是导航属性类型是ICollection,这意味着它最多只使用延迟加载,并将从数据库中带来所有文章,并在内存中找到我要查找的文章。

我之前的post(不是我)也描述了我的问题:

entity framework代码First IQueryable

有没有办法将导航属性设置为IQueryable或其他一些可以绕过此限制的设计?

没有办法将导航属性设置为IQueryable但您可以使用以下命令将集合更改为IQueryable

 IQueryable
query = context.Entry(category).Collection(c => c.articles).Query(); query.Where(...).Load();

通常你的“算法”看起来很奇怪。 您希望使用基类,但同时要访问子属性。 这听起来是错误的,它最有可能以更好的方式解决(非“通用”方式也更好)。