LINQ to SQL Designer和Geography数据类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINQ to SQL Designer和Geography数据类型相关的知识,希望对你有一定的参考价值。

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

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

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

任何指针都非常赞赏。

答案

请查看以下文章/答案的详细信息:

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 []。

另一答案

要更正此错误:

  1. 创建基于所需表的视图,该视图不包含不受支持的数据类型。 2.将视图从Server Explorer / Database Explorer拖到设计器上。

或者看看这篇文章The Missing Linq to SQL Spatial,本文提供了有关如何在Linq to SQL中使用SQL Server空间数据类型-Geography和Geometry的提示和黑客

另一答案

我有一个项目(一个小项目,被授予),它对空间类型有了新的要求。我决定看看从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. 解决编译错误后重建它。

而已。它比我想象的容易得多,现在我可以使用空间类型而不需要任何技巧。

以上是关于LINQ to SQL Designer和Geography数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Linq-to-SQL 和 DateTime 的怪异

LINQ to SQL class LINQ to sql Objects?

Linq To SQL和Linq To Object的批量操作InsertAllOnSubmit介绍

Linq-to-SQL 数据检索速度比较

EF 6.x,LINQ-to-SQL和原始SQL子句

Linq-to-SQL 数据库文件为空