【问题标题】:Entity Framework 5 Spatial Data And WCFEntity Framework 5 空间数据和 WCF
【发布时间】:2012-09-05 13:13:35
【问题描述】:

我目前正在尝试将现有数据层迁移到 EF5。

在迁移之前,我们没有将地理数据存储在 SQL 空间数据结构中;由于 EF 现在支持空间数据,我们正在重构我们的代码。

我们正在使用自我跟踪实体在 silverlight 客户端和 WCF 服务之间交换数据。问题在于,由于 DbGeometry 类型无法序列化,因此无法与客户端共享我们的实体。

我希望我遗漏了一点,因此存在直接解决方案;另一方面,如果有人可以提供解决方法,我会很高兴。 (我们可以使用 DTO,但可能需要大量重构。)

【问题讨论】:

  • 文档说DbGeometrySerializableAttribute -- msdn.microsoft.com/en-us/library/… ?
  • 好吧,这很奇怪,我读过它不可序列化。另一方面,由于无法在客户端和服务器之间共享实体,因此问题仍然存在。我在 silverlight 中找不到包含 DbGeometry 类型的 dll。
  • DTO 可能是您唯一的选择?
  • 如果您使用的是 Sql Server,EF 空间类型实际上是由 Sql Server 空间类型支持的。如果您只需要这些类型,您可以通过安装 Sql Server 功能包 (microsoft.com/en-us/download/details.aspx?id=29065) 来安装它们。你所追求的是 Microsoft.SqlServer.Types。我不知道这些类型是否适用于 Silverlight。这个线程stackoverflow.com/questions/10117008/… 也可能有用。

标签: c# .net wcf silverlight entity-framework-5


【解决方案1】:

其实有两种选择: 第一个很明显;使用 DTO 传输数据。

第二个答案有点复杂;但我使用以下方法解决了问题:

首先我使用反射器反编译了DbGeometryDbGeography 类。然后,我在 silverlight 中创建了一个名为 System.Data.Spatial 的程序集,并将反编译的类添加到该程序集中。接下来是困难的部分;我删除了所有无法在 Silverlight 中编译的代码(如 DB 连接相关代码)。

然后我得到了一个 Silverlight 空间数据库,它只支持两个基本功能: 获取数据为 WKT 并将数据保存为 WKT。这两个函数足以使用相关数据并使用 WCF 服务将其保存回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多