2010-11-30 54 views
12

我们正在为我们的应用程序使用基于实体框架模型的WCF数据服务。实体框架中的层次结构ID不起作用

在这我们需要添加一个类型为HierarchyId的列的表。当我将该表添加到EDMX文件时,HierarchId列未出现在类文件中。

我应该怎么做才能使用HierarchyID?我读到Entity Framework不支持HierarchyID,那我该如何实现呢?

+2

你问题在于EF,而不是WCF。问题是EF不能表示hierarchyid列。 – Gabe 2010-11-30 18:52:08

+0

我用这一点点的代码使HierarchyID字符串的工作更容易一些... http://stackoverflow.com/questions/3347860/is-there-a-practical-way-to-use-the-hierarchyid- datatype-in​​-entity-framework-4 – EBarr 2012-02-29 16:46:55

回答

24

您总是可以将HierarchyId转换为其字符串表示形式 - 类似于/1/3/4/1 - 并通过WCF数据服务发送该字符串。

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

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

更新#2:read the docs!您可以将类似/1/3/4/1的字符串解析为HierarchyId类型 - 使用HierarchyId::Parse(string)或通常的CAST(string as HierarchyId)方法来执行此操作。

10

如果使用计算列只要记住,你也需要这样你的财产的DatabaseGenerated数据注释:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public string HierarchyString { get; set; } 

检查这篇文章以了解更多资讯: Entity Framework Code First Computed Properties