2012-09-05 25 views
1

我目前正試圖將現有的數據層遷移到EF5。實體框架5空間數據和WCF

在遷移之前,我們沒有在SQL空間數據結構中存儲地理數據; EF現在支持空間數據,我們正在重構我們的代碼。

我們使用自追蹤實體在Silverlight客戶端和WCF服務之間交換數據。問題是,由於DbGeometry類型不能被序列化,所以不可能將我們的實體與客戶端共享。

我希望我缺少一點,因此存在直接的解決方案;另一方面,如果有人能提供解決方法,我會很高興。 (我們可以使用DTO,但可能需要巨大的重構。)

+0

文檔說'DbGeometry'具有'SerializableAttribute' - http://msdn.microsoft.com/en-us/library/system.data.spatial.dbgeometry.aspx? – Brendan

+0

好吧,這很奇怪,我讀過它是不可序列化的。另一方面,問題仍然存在,因爲在客戶端和服務器之間無法共享實體;在silverlight中找不到包含DbGeometry類型的dll。 – daryal

+1

DTO's可能是您唯一的選擇? – Brendan

回答

1

實際上有兩種選擇: 第一個是顯而易見的;使用DTO傳輸數據。

第二個答案有點複雜;但我使用以下方法解決了問題:

首先,我使用反射器對DbGeometryDbGeography類進行了反編譯。然後,我在silverlight中創建了一個名爲System.Data.Spatial的程序集,並在此程序集中添加了反編譯類。其次是困難的部分;我刪除了所有無法在Silverlight中編譯的代碼(例如數據庫連接相關代碼)。

然後,我結束了一個Silverlight空間數據庫,它只支持兩個基本功能: 獲取數據爲WKT並將數據保存爲WKT。這兩個函數足以消耗相關數據並使用WCF服務將其保存回去。