gpt4 book ai didi

entity-framework - Entity Framework HierarchyId 解决方法

转载 作者:行者123 更新时间:2023-12-03 21:21:18 26 4
gpt4 key购买 nike

英孚 5.0

我正在开发一个原型(prototype)来一起测试hierarchyid 和 Entity Framework 。我有以下架构:

Create Table dbo.Employee
(
EmployeeId int identity not null,
Name nvarchar(100) not null,
Node hierarchyid not null,
NodePath as Node.ToString() persisted,
Level AS Node.GetLevel() persisted,
ManagerNode as Node.GetAncestor(1) persisted,
ManagerNodePath as Node.GetAncestor(1).ToString() persisted
);

Alter Table dbo.Employee
Add Constraint EmployeePK Primary Key NonClustered (EmployeeId);

Go

--Enforce Hierarchy
Alter Table dbo.Employee
Add Constraint EmployeeManagerNodeNodeFK Foreign Key (ManagerNode) References Employee(Node);
Go

Create Unique Clustered Index EmployeeDepthFirstIndex on dbo.Employee(Node);

Go

Create NonClustered Index EmployeeBreathFirstIndex on dbo.Employee(Level, Node);

Go

根据我的阅读,EF 目前不支持 hierarchyid 数据类型,但有些人建议了一些解决方法,例如创建我在上面所做的计算列 (Node.ToString())。

有没有办法设置 EF 以便它识别父/子关系,以便我可以有效地拥有一个下属集合?例如
Employee.Subordinates

我唯一能想到的是创建一个带有 FK 的 ManagerId 列,但随后我有效地将层次结构存储在两个地方。

谢谢你的帮助!

最佳答案

使用 varbinary(892) 而不是 hierarchyid。
EF 识别 varbinary 返回字节数组。
您可以将字节数组转换为 SqlHierarchyid 类型并使用 hyrarchy pod 函数。
使用此解决方法,您甚至可以在其他数据库中使用 hierarchyid 函数。
http://www.casavillar.com.br/blog包含更多详细信息以及指向 nugget 和 github 的链接,您可以在其中找到包括 MySql 在内的示例

关于entity-framework - Entity Framework HierarchyId 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com