Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架5空间数据和WCF_C#_.net_Wcf_Silverlight_Entity Framework 5 - Fatal编程技术网

C# 实体框架5空间数据和WCF

C# 实体框架5空间数据和WCF,c#,.net,wcf,silverlight,entity-framework-5,C#,.net,Wcf,Silverlight,Entity Framework 5,我目前正在尝试将现有数据层迁移到EF5 在迁移之前,我们没有将地理数据存储在SQL空间数据结构中;EF现在支持空间数据,我们正在重构代码 我们使用自跟踪实体在silverlight客户端和WCF服务之间交换数据。问题是,由于DbGeometry类型无法序列化,因此无法与客户机共享实体 我希望我遗漏了一点,因此存在一个直接的解决方案;另一方面,如果有人能提供解决办法,我会很高兴。(我们可以使用DTO,但可能需要进行大规模重构。)事实上,有两种选择: 第一个是显而易见的;使用DTO传输数据 第二个答

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

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

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


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

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

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

首先,我使用reflector反编译了
DbGeometry
DbGeography
类。然后,我在silverlight中创建了一个名为
System.Data.Spatial
的程序集,并向该程序集添加了反编译类。其次是困难的部分;我删除了所有不能在Silverlight中编译的代码(如DB连接相关代码)

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

文档中说
DbGeometry
具有
SerializableAttribute
?很奇怪,我读到它不可序列化。另一方面,问题仍然存在,因为无法在客户端和服务器之间共享实体;我在silverlight中找不到包含DbGeometry类型的dll。DTO可能是您唯一的选择?如果您使用的是Sql Server,则EF空间类型实际上由Sql Server空间类型支持。如果您只需要这些类型,可以通过安装Sql Server功能包()来安装它们。您需要的是Microsoft.SqlServer.Types。但我不知道这些类型是否适用于Silverlight。此外,此线程也可能有用。