Joh*_*ohn 2 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 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; }
}
Run Code Online (Sandbox Code Playgroud)
我已经编写了代码,我可以用它从数据库中检索一个类别,而实际上不知道它是一个类别。从那时起,我必须再次检索该类别的一篇文章,而不知道它是一篇文章。对于类别,我依赖 ContentNode 基类和 IUrlNode 接口上的文章。
类别检索工作正常,并且使用单个查询,但在我实际获得类别后,我必须使用反射来获取 RouteChild 属性指向的导航属性,以找到符合我的条件的单篇文章。问题是导航属性类型是 ICollection,这意味着它最多只能使用延迟加载,并将从数据库中获取所有文章,并在内存中找到我正在寻找的文章。
我的问题也在上一篇文章中描述过(不是我写的):
有没有办法让导航属性作为 IQueryable 或其他一些可以绕过这个限制的设计?
不,没有办法拥有导航属性,IQueryable但您可以IQueryable使用以下方法将集合更改为:
IQueryable<Article> query = context.Entry(category).Collection(c => c.articles).Query();
query.Where(...).Load();
Run Code Online (Sandbox Code Playgroud)
一般来说,你的“算法”看起来很奇怪。您想使用基类,但同时又想访问子属性。这听起来不对,很可能可以用更好的方式解决(非“通用”方式也更好)。
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |