C# 实体框架中的HierarchyID不起作用

C# 实体框架中的HierarchyID不起作用,c#,entity-framework,hierarchyid,C#,Entity Framework,Hierarchyid,我们正在为我们的应用程序使用基于实体框架模型的WCF数据服务 在这里,我们需要添加带有HierarchyId类型列的表。当我将该表添加到EDMX文件时,hierarchyd列不会出现在类文件中 我应该如何使用HierarchyID?我了解到实体框架不支持HierarchyID,因此如何实现这一点?您可以始终将HierarchyID转换为其字符串表示形式(类似于/1/3/4/1),并通过WCF数据服务发送该字符串 更新:如果将此计算的持久列添加到SQL Server表中,那么新列肯定会显示在EF模

我们正在为我们的应用程序使用基于实体框架模型的WCF数据服务

在这里,我们需要添加带有
HierarchyId
类型列的表。当我将该表添加到EDMX文件时,
hierarchyd
列不会出现在类文件中


我应该如何使用
HierarchyID
?我了解到实体框架不支持
HierarchyID
,因此如何实现这一点?

您可以始终将
HierarchyID
转换为其字符串表示形式(类似于
/1/3/4/1
),并通过WCF数据服务发送该字符串

更新:如果将此计算的持久列添加到SQL Server表中,那么新列肯定会显示在EF模型中,并且您应该能够使用此列通过WCF和WCF数据服务将其发送回:

ALTER TABLE dbo.YourTable
ADD HierarchyString AS (your hierarchyID field).ToString() PERSISTED

更新#2:!您可以将类似
/1/3/4/1
的字符串解析回
层次ID
类型-使用
HierarchyId::parse(string)
或通常的
转换(字符串作为层次ID)
方法执行此操作。

如果使用计算列,请记住,您还需要在属性上使用DatabaseGenerated数据注释,如下所示:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string HierarchyString { get; set; }
查看本文以了解更多信息:

正如我前面所说,在将表添加到EDMX文件时,hierarchyId字段没有出现。所以我必须在svc文件中有一个方法,并使用“insert-into…”查询进行insert?好的,这可以用作getter,setter呢?我试过塞特那种东西。如果setter是可能的,那么一切都可以用更简单的方式来完成。通过使用这个,我可以得到数据。谢谢marc_。你的问题是EF,而不是WCF。问题是EF不能表示hierarchyid列。我用这段代码使处理hierarchyid字符串变得更容易@EBarr,您的实现看起来不错,我的要求是只使用现有的HierarchyID。我做的唯一一件事是,使用computed列,因为EF不支持。通过使用计算列,它的工作非常出色。