![](/img/trans.png)
[英]Load Self Referencing Entity With EF Core 5.0 ( Just get Parents and their children in their navigation property )
[英]Get all subitems (children, grandchildren) and parents from a self referencing table
我想创建一个“可选方法”(无论它是视图还是函数,存储过程或其他东西,我都不知道是否还有其他方法)来获取所有直接父母和所有孩子,自孙表中的,孙,孙代等记录。 我想从C#(.NET)调用的“可选方法”
我们有一个称为entities
的表,它(除其他外)具有一个属性parentId
,它引用entities
表的Id
字段。 通过这种方式,我们对实体树进行建模(在我们的案例中是建筑物,思想屋,地板,房间等的元素)
父节点(如果可视化)是形成到根元素的直线的节点。
子节点可以可视化地“展开”。
如果必须在两个单独的语句中进行选择就可以了。
在C#中,我知道如何执行此操作,但是我不想向数据库发出大量请求,并且我认为Sql Server本身可以快速执行此操作,但我不知道该如何操作:-)
尝试使用以下递归CTE
作为解决方案的基础:
WITH TREE AS (
SELECT ROOT.Id
,ROOT.ParentId
,ROOT.Prop1
,ROOT.Prop2
...
,ROOT.PropN
,1 AS Level
FROM ENTITIES ROOT
-- list entities starting from ROOT node (no ParentId)
WHERE ROOT.ParentId IS NULL
-- or list entities starting from a specified node
-- WHERE ROOT.Id = @entityId
UNION ALL
SELECT CHILD.Id
,CHILD.ParentId
,CHILD.Prop1
,CHILD.Prop2
...
,CHILD.PropN
,PARENT.Level + 1
FROM ENTITIES CHILD INNER JOIN
TREE PARENT ON CHILD.ParentId = PARENT.Id
WHERE CHILD.ParentId IS NOT NULL
)
SELECT * FROM TREE
如果需要传递参数,可以将CTE
放在VIEW
或Stored Procedure
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.