【发布时间】:2018-03-31 20:36:36
【问题描述】:
我正在使用 Entity Framework 6,但在获取 Include 表达式以执行我需要的操作时遇到问题。
假设我有这些课程:
public class Blog
{
public int BlogId { get; set; }
public string Title { get; set; }
public ICollection<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int OwnerId { get; set; }
}
如果我打电话给
context.Blogs.Include(b => b.Posts)
这一切都按预期工作。 Posts 集合已填充。但是,我有一种情况,我不想检索所有帖子。我想根据另一个复杂查询检索 一个 特定帖子。例如将博客更改为...
public class Blog
{
public int BlogId { get; set; }
public string Title { get; set; }
public Post MostPopularPost { get; set; }
}
一旦应用了某个条件/排序/分组,我希望 MostPopularPost 成为 Posts 表中的 FirstOrDefault 实体。在我的真实场景中,子实体取决于配置、安全性等 - 即您可能会根据您是谁或系统的配置方式获得不同的实体。 MostPopularPost 的解析取决于其他标准 - 而不仅仅是外键关系。如何让实体框架从更复杂的查询结果中“修复”属性?
另一个约束是我的方法需要返回一个 IQueryable,因为表达式被传回应用程序以添加更多条件。因此 ToList() 和其他内存中的处理并不能真正起作用。理想情况下,这一切都需要在数据库中执行。
【问题讨论】:
-
- 不仅仅是外键关系 那么,EF 只处理外键关系。所以没有自动行为。定义 DTO 并使用投影。
标签: c# entity-framework