我已经搜索出互联网来创建一个表来支持树数据或层次结构数据,但似乎没有提供太多信息。
假设我希望有一个位置表,如果有其他位置数据的父节点,它可以自引用。
如何在ef-core中实现以下查询?
- 位置A. 位置B. 位置C.
- 位置D. 位置E. 位置J. 位置F. 位置K. 位置L.
- 位置M.
这是我的位置模型......
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核心和实体框架的新手。
谢谢。
你想要的实体似乎是这样的:
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; }
}
?
的ParentId
是因为你的根没有任何父母。因此,根(或可能是根)是没有任何ParentId
的那个,并且树的其他部分可以由他们的ParentIds
确定。
关于第二个问题,如果要读取具有层次结构的数据,还需要将另一个属性添加到实体:
public virtual List<Location> Children { get; set; }
使用以下配置:
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
因此,使用上面的实体,只需执行db.Location.toList();您将获得所需的输出。