【问题标题】:HierarchyID in Entity Framework not working实体框架中的 HierarchyID 不起作用
【发布时间】:2010-11-30 16:34:54
【问题描述】:

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

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

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

【问题讨论】:

  • 您的问题在于 EF,而不是 WCF。问题是EF不能代表hierarchyid列。
  • 我使用了这段代码让 HierarchyID 字符串的处理变得更容易...stackoverflow.com/questions/3347860/…
  • @EBarr,您的实现看起来不错,我的要求只是使用现有的 HierarchyID。我唯一做的是,使用计算列,因为 EF 不支持。通过使用计算列,它的工作做得很好。

标签: c# entity-framework hierarchyid


【解决方案1】:

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

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

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) 方法。

【讨论】:

  • 正如我之前所说,在将表添加到 EDMX 文件时,没有显示 hierarchyId 字段。所以我必须在 svc 文件中有方法并使用“insert into ...”查询插入?
  • OK,这个可以当getter,那么setter呢?我尝试了二传手之类的东西。如果 setter 是可能的,那么一切都可以以更简单的方式完成。通过使用它,我可以获得数据。谢谢 marc_s。
【解决方案2】:

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

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

查看这篇文章了解更多信息: Entity Framework Code First Computed Properties

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多