SQL Server Hierarchyid和实体框架HierarchyId之间的差异

时间:2019-12-12 10:08:35

标签: c# sql-server entity-framework entity-framework-6 hierarchy

我看到MS SQL Server Datatype hierarchyid和相应的Entity Framework 6类System.Data.Entity.Hierarchy.HierarchyId(来自程序集EntityFramework.6.3.0\lib\net45\EntityFramework.dll)的行为不同。
(我找不到该类型的api文档,但是source code似乎与Microsoft.SqlServer.Types.SqlHierarchyId相同)

我有一个HierarchyId,例如childA = '/1/1.1/'。现在,我想获得同一级别的下一个HierarchyId。 所以我叫childA.GetAncestor(1).GetDescendant(childA,null)

Sql服务器返回'/1/2/',但是Entity Framework返回'/1/1.2/'

因此,当我通过Entity Framework将节点插入数据库时​​,它会获得与使用存储的SQL过程或触发器时不同的ID,并且当我稍后想要通过其预测ID搜索节点时,搜索可能会失败。

是否有一种无需数据库往返即可获得EF中SQL行为的方法?

示例SQL代码:

Declare @ChildA hierarchyid
select @ChildA = '/1/1.1/'
select CAST (@ChildA.GetAncestor(1).GetDescendant(@ChildA,null) as varchar) as ChildB
-- RESULT: ChildB = '/1/2/'

示例C#代码:

var childA = new System.Data.Entity.Hierarchy.HierarchyId("/1/1.1/");
var childB = childA.GetAncestor(1).GetDescendant(childA,null);
Console.WriteLine(childB);
// RESULT: ChildB = "/1/1.2/"

0 个答案:

没有答案