实体框架 - 更多地控制子实体解析?

时间:2018-03-31 20:36:37

标签: c# entity-framework

我使用的是Entity Framework 6,而我在使用包含表达式时遇到了问题。

说我有这些课程:

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的分辨率取决于其他标准 - 而不仅仅是外键关系。如何让Entity Framework来执行该属性&#34; fix-up&#34;从更复杂的查询结果?

另一个约束是我的方法需要返回一个IQueryable,因为表达式会传递回应用程序以添加更多条件。因此ToList()和其他内存中处理并不真正起作用。理想情况下,它都需要在数据库中执行。

1 个答案:

答案 0 :(得分:0)

这是一个返回自定义对象的查询示例

https://msdn.microsoft.com/en-us/Library/bb738694(v=vs.100).aspx

在您的情况下,我认为您希望在同一个项目中创建一个部分类,但是将Blog与包含您方法的Blog分开。部分类文件将是类名Blog。