我看到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/"