实体框架核心关闭表(代码优先)

时间:2019-02-28 06:19:01

标签: c# .net-core ef-code-first entity-framework-core ef-core-2.2

我已经在互联网上搜索了一个表来支持树数据或层次结构数据,但是似乎并没有提供太多信息。

比方说,我想拥有一个位置表,该表可以在其他位置数据存在父项的情况下自引用。

如何在ef-core中实现以下查询?

  1. 列出根目录下的所有位置项(dept = 0)
  2. 列出所有位置层次结构。例如。
  
      
  • 位置A      
        
    • 位置B
    •   
    • 位置C
    •   
  •   
  • 位置D      
        
    • 位置E      
          
      • 位置J
      •   
    •   
    • 位置F      
          
      • 位置K
      •   
      • 位置L
      •   
    •   
  •   
  • 位置M
  •   
  1. 列出所选节点下的所有子位置,并优先选择部门级别(例如1、2或其他)。
  2. 列出所选节点下的所有父级位置,并优先选择部门级别(例如1、2或其他)。

这是我的位置模型...

public class Location
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public string Address { get; set; }

    public NpgsqlTsVector SearchVector { get; set; }
}

请帮助或提供任何建议资源来开始。我是dotnet核心和实体框架的新手。

谢谢。

1 个答案:

答案 0 :(得分:0)

您想要的实体似乎是这样的:

public class Location
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Address { get; set; }
    public NpgsqlTsVector SearchVector { get; set; }
    public int? ParentId { get; set; }
    public Location Parent { get; set; }
}

?的{​​{1}}是因为您的根没有任何父母。因此,根(或可能的根)是不包含任何ParentId的根,树的其他部分也可以通过其ParentId来确定。

更新:

关于第二个问题,如果要读取具有层次结构的数据,则还需要向该实体添加另一个属性:

ParentIds

具有以下配置:

public virtual List<Location> Children { get; set; }

因此,对于上述实体,只需执行db.Location.toList();。您将获得所需的输出。