我目前正在尝试将现有数据层迁移到 EF5。
在迁移之前,我们没有将地理数据存储在 SQL 空间数据结构中;随着 EF 现在支持空间数据,我们正在重构我们的代码。
我们正在使用自我跟踪实体在 silverlight 客户端和 WCF 服务之间交换数据。问题在于,由于 DbGeometry 类型无法序列化,因此无法与客户端共享我们的实体。
我希望我遗漏了一点,因此存在直接的解决方案;另一方面,如果有人可以提供解决方法,我会很高兴。(我们可以使用 DTO,但可能需要大量的重构。)
我目前正在尝试将现有数据层迁移到 EF5。
在迁移之前,我们没有将地理数据存储在 SQL 空间数据结构中;随着 EF 现在支持空间数据,我们正在重构我们的代码。
我们正在使用自我跟踪实体在 silverlight 客户端和 WCF 服务之间交换数据。问题在于,由于 DbGeometry 类型无法序列化,因此无法与客户端共享我们的实体。
我希望我遗漏了一点,因此存在直接的解决方案;另一方面,如果有人可以提供解决方法,我会很高兴。(我们可以使用 DTO,但可能需要大量的重构。)
实际上有两种选择:第一种是显而易见的;使用 DTO 传输数据。
第二个答案有点复杂;但我使用以下方法解决了这个问题:
首先,我使用反射器反编译了DbGeometry
和类。DbGeography
然后,我在 silverlight 中创建了一个名为 as 的程序集,System.Data.Spatial
并将反编译的类添加到该程序集中。接下来是困难的部分;我删除了所有无法在 Silverlight 中编译的代码(例如与数据库连接相关的代码)。
然后我得到了一个 Silverlight 空间数据库,它只支持两个基本功能:将数据获取为 WKT 并将数据保存为 WKT。这两个函数足以使用相关数据并使用 WCF 服务将其保存回来。