Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server层次结构ID和实体框架层次结构ID之间的差异_C#_Sql Server_Entity Framework_Entity Framework 6_Hierarchy - Fatal编程技术网

C# SQL Server层次结构ID和实体框架层次结构ID之间的差异

C# SQL Server层次结构ID和实体框架层次结构ID之间的差异,c#,sql-server,entity-framework,entity-framework-6,hierarchy,C#,Sql Server,Entity Framework,Entity Framework 6,Hierarchy,我看到了,以及相应的实体框架6类的不同行为System.Data.Entity.HierarchyId(来自程序集EntityFramework.6.3.0\lib\net45\EntityFramework.dll)。 (我找不到此类型的api文档,但似乎与相同) 我有一个HierarchyId,例如childA='/1/1.1/'。现在我想在同一级别上获得下一个层次ID。 所以我调用childA.get祖先(1).getgenderant(childA,null) Sql server返回'

我看到了,以及相应的实体框架6类的不同行为
System.Data.Entity.HierarchyId
(来自程序集
EntityFramework.6.3.0\lib\net45\EntityFramework.dll
)。
(我找不到此类型的api文档,但似乎与相同)

我有一个
HierarchyId
,例如
childA='/1/1.1/'
。现在我想在同一级别上获得下一个
层次ID
。 所以我调用
childA.get祖先(1).getgenderant(childA,null)

Sql server返回
'/1/2/'
,但实体框架返回
'/1/1.2/'

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

有没有一种方法可以在EF中获得SQL行为,而无需数据库往返

示例SQL代码:

Declare@ChildA hierarchyid
选择@ChildA='/1/1.1/'
选择CAST(@ChildA.get祖先(1).getgeneratant(@ChildA,null)作为varchar)作为ChildB
--结果:ChildB='/1/2/'
示例C#代码:

var childA=newsystem.Data.Entity.HierarchyId(“/1/1.1/”);
var childB=childA.get祖先(1.getgenderant)(childA,null);
控制台写入线(childB);
//结果:ChildB=“/1/1.2/”

由于从逻辑上讲,这两个结果都是
/1/
之后的
/1.1/
的后代,因此它们选择该逻辑关系的不同表示形式会导致什么问题?一个问题是节点应该获得相同的可预测ID,无论它是通过SQL还是EF插入或更新的;否则,ID就没有那么有用了。我可以通过只使用SQL或EF来解决这个问题。但真正的问题是,EF ID将变得相当长且丑陋:)