C# 实体框架4:多对多关系IQueryable而不是ICollection

C# 实体框架4:多对多关系IQueryable而不是ICollection,c#,entity-framework-4,C#,Entity Framework 4,各位早上好, 我试图解决一个问题,我遇到的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;

各位早上好,

我试图解决一个问题,我遇到的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<Category> 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<Article> CategoryArticles { get; set; }
}
公共类文章:IUrlNode
{
[关键]
公共Guid ArticleID{get;set;}
公共字符串标题{get;set;}
public DateTime DateCreated{get;set;}
public DateTime DateUpdated{get;set;}
公共字符串摘要{get;set;}
[System.ComponentModel.DataAnnotations.InverseProperty(“CategoryArticles”)]
公共虚拟IQueryable ArticleCategories{get;set;}
公共字符串友好URL
{
得到;
设置
}
}
[RouteChild(“类别”)]
公共类类别:ContentNode
{
公共Guid ServiceId{get;set;}
[System.ComponentModel.DataAnnotations.InverseProperty(“ArticleCategories”)]
公共虚拟图书馆


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

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

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

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

你能改为创建一个新的可查询文件吗?例如,使用文章的ID对上下文启动一个新的查询,你可以从中导航?希望这是有意义的…我会看看你的建议。这一点的全部目的是能够在不同类型的树上有节点。类别就是其中的一种类型。我正在打破这棵树d把文章放在它之外,因为我希望有很多。是的,效果很好!还发现ObjectContext.GetObjectType非常有用。谢谢!