【问题标题】:Entity Framework - More control over child entity resolution?实体框架 - 对子实体解析的更多控制?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多