2010-08-27 34 views
7

我有一些問題加載到設計器的表。 我收到以下錯誤。LINQ to SQL設計器和地理數據類型

One or more selected items contain a data type that is not supported by the designer

假設它是導致此錯誤的表中使用的地理類型,我會正確嗎?

任何指針非常讚賞。

回答

1

檢查下面文章/答案的細節:

SqlGeography and Linq to Sql

Is it possible to use SqlGeography with Linq to Sql?

空間類型並不按LINQ to SQL的支持。支持不是「不好」 - 它不存在。

您可以將它們作爲BLOB讀取,但您無法通過將Linq中的列類型更改爲SQL來完成此操作。您需要在數據庫級別更改查詢以使用CAST語句將該列作爲varbinary返回。您可以通過添加計算的varbinary列來在表級別執行此操作,Linq將很樂意映射到byte []。

+0

謝謝,這個項目剛剛開始。移動到支持地理類型的不同表格映射(orm)框架會更好嗎?有沒有? – Chin 2010-08-27 06:23:42

+0

@Chin - 檢查文章在哪裏有一些工作在那裏,我希望能爲你工作 - 比不需要移動另一個orm – 2010-08-27 07:15:44

2

要糾正該錯誤:

  1. 創建基於所期望的表和不包括不支持的數據類型的視圖。 2.將服務器資源管理器/數據庫資源管理器中的視圖拖放到設計器上。

或看到這篇文章The Missing Linq to SQL Spatial,本文提供了有關如何使用SQL Server空間數據類型-Geography和幾何性質中的LINQ to SQL

0

我有一個項目(一個小的提示和黑客,授予),對空間類型有了新的要求。我決定看看從LINQ升級到SQL實體框架是多麼容易。

花了我不超過30分鐘。在開始之前,請確保您有源代碼管理備份。

  1. Install-Package EntityFramework -Version {pick one}
  2. 刪除舊.dbml文件(S)
  3. 生成一個新的實體模型,並更新引用新的實體對象(這是比較容易,如果你已經有了一個基礎庫或東西包裹LINQ到SQL)。我走了這條路線(數據庫第一/設計師),因爲它是從LINQ到SQL的更簡單的升級途徑。如果您願意,您可以先嚐試代碼,但是... YMMV。
  4. 更新您的連接字符串。 Entity Framework圍繞傳統的SQL連接有自己奇怪的包裝。我的是這樣的,你可能看起來不一樣:metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS; Initial Catalog=MyDataBase; Integrated Security=True'
  5. 修復編譯錯誤。它們中的大多數將在Insert/DeleteOnSubmit和EF的Add/RemoveAdd/RemoveRange中存在差異。事務範圍可能會有所不同(考慮使用context.Database.BeginTransaction而不是事務範圍)。
  6. 解決編譯錯誤後重建它。

就是這樣。這比我預期的要容易得多,現在我可以毫不費力地使用空間類型。