1

背景:

给定以下两个实体通过一对一的关系连接:

public partial class Parent
{
    public long Id { get; set; }
    public string Email { get; set; }
    public virtual Details Details{ get; set; }
}

public partial class Details
{
    public long Id { get; set; }
    public long ParentId{ get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public virtual Parent Parent { get; set;}
}

并具有以下Query模型:

public class Query
{
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? Dob { get; set; }
}

问题

如何将QueryasIQueryable应用于Parent(或Details)实体?

基于我的用例的注释:

  • Query类不能有两个子类ParentDetails(应该展平)
  • ParentDB SQL 查询应该获取与and中的两个条件都匹配的结果Details(如果条件失败以获取详细信息,则 parent 不应该出现在结果中)。
  • 模型中可能有很长的可选字段列表Query。这意味着数据库查询应该是动态且足够智能的,以知道如何构建查询并知道中的每个字段Query属于哪个实体ParentDetails(即我不想要一个解决方案,我添加条件来检查orDob中是否存在Query不是)

用例:

我正在使用HotChocolate框架来集成 GraphQL,它使用表达式树来构建查询。这里提到了我要解决的问题

您的支持和建议将不胜感激!

4

1 回答 1

0

我设法通过View在数据库上创建一个连接两个表以充当单个实体来处理此问题,无论它是一对一链接表还是单个表,我都可以在其中过滤、分页和排序。然后使用此链接对该视图进行逆向工程以与 EntityFramework 集成,并最终设法处理IQueryable两个实体。

如果有任何其他可用且适用于 HotChocolate 的选项,请添加另一个答案以增强我现有的解决方案。

于 2020-07-25T09:18:02.447 回答