C# 实体框架4:多对多关系IQueryable而不是ICollection
各位早上好, 我试图解决一个问题,我遇到的EF代码第一。我的模式如下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;
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非常有用。谢谢!