LINQ to SQL Designer和Geography数据类型

时间:2010-08-27 06:15:05

标签: visual-studio-2010 linq-to-sql sqlgeography

我在将表格加载到设计器中时遇到了一些问题。 我收到以下错误。

  

一个或多个所选项目包含设计者不支持的数据类型

假设它是导致此错误的表中使用的地理类型,我是否正确?

任何指针都非常赞赏。

3 个答案:

答案 0 :(得分:2)

要更正此错误:

  1. 创建基于所需表的视图,该视图不包含不受支持的数据类型。 2.将视图从Server Explorer / Database Explorer拖到设计器上。
  2. 或查看本文The Missing Linq to SQL Spatial,本文提供有关如何在Linq to SQL中使用SQL Server空间数据类型-Geography和Geometry的提示和黑客

答案 1 :(得分: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 []。

答案 2 :(得分:0)

我有一个项目(一个小项目,被授予),它对空间类型有了新的要求。我决定看看将实体框架从LINQ升级到SQL是多么容易。

我花了不到30分钟。确保在开始之前有源控制备份。

  1. Install-Package EntityFramework -Version {pick one}
  2. 删除旧.dbml个文件
  3. 生成一个新的实体模型并更新对新实体对象的引用(如果您已经有一个基本存储库或包含LINQ to SQL的东西,这会更容易)。我走这条路(数据库第一/设计师)因为它是从LINQ到SQL的更简单的升级路径。如果您愿意,可以先试用代码,但是...... YMMV。
  4. 更新连接字符串。实体框架有自己的传统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. 解决编译错误后重建它。
  7. 就是这样。它比我想象的容易得多,现在我可以使用空间类型而不需要任何诡计。