实体框架5空间数据和WCF

时间:2012-09-05 13:13:35

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

实际上有两种选择: 第一个是显而易见的;使用DTO传输数据。

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

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

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