LINQ to SQL 设计器和地理数据类型

Posted

技术标签:

【中文标题】LINQ to SQL 设计器和地理数据类型【英文标题】:LINQ to SQL Designer and the Geography datatype 【发布时间】:2010-08-27 06:15:04 【问题描述】:

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

一个或多个选定项包含设计器不支持的数据类型

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

任何指针都非常感谢。

【问题讨论】:

【参考方案1】:

要纠正这个错误:

    创建一个基于所需表且不包含不受支持的数据类型的视图。 2.将视图从服务器资源管理器/数据库资源管理器拖到设计器上。

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

【讨论】:

【参考方案2】:

查看下面的文章/答案以获取详细信息:

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

【讨论】:

谢谢,这个项目刚刚开始。转移到支持地理类型的不同表映射(orm)框架会更好吗?有吗? @Chin - 查看文章中是否有一些解决方法,我希望这对你有用——而不是不需要移动到另一个 orm【参考方案3】:

我有一个项目(一个小项目,已获批准),该项目对空间类型提出了新的要求。我决定看看将实体框架从 LINQ 升级到 SQL 是多么容易。

我用了不超过 30 分钟。确保在开始之前有源代码管理备份。

    Install-Package EntityFramework -Version pick one 删除旧的.dbml 文件 生成一个新的实体模型并更新对新实体对象的引用(如果您已经有一个基础存储库或包装 LINQ to SQL 的东西,这会更容易)。我选择了这条路线(数据库优先/设计器),因为它是从 LINQ 到 SQL 的更简单的升级路径。如果您愿意,可以先尝试代码,但是...YMMV。 更新您的连接字符串。实体框架对传统的 SQL 连接有自己的怪异包装器。我的是这样的,你的可能看起来不一样:metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=.\SQLEXPRESS; Initial Catalog=MyDataBase; Integrated Security=True' 修复编译错误。其中大部分将是Insert/DeleteOnSubmit 和EF 的Add/RemoveAdd/RemoveRange 的差异。事务范围的工作方式可能不同(考虑使用 context.Database.BeginTransaction 而不是事务范围)。 解决编译错误后重新构建它。

就是这样。这比我预期的要容易得多,现在我可以毫不费力地使用空间类型了。

【讨论】:

通常在现有项目中切换到实体框架并不容易。无论如何,这个问题被标记为 ling-2-sql 所以回答使用实体框架不是一个解决方案。 官方的回答是 LINQ-2-SQL 不支持地理类型。如果您需要 Microsoft 提供的适当解决方案,我很确定就是这样。

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

实现接口的 LINQ to SQL 类

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

使用 Linq-to-SQL 的 ADO.NET 数据服务

如何通过MVC向数据库中添加数据?用 的是。net、C#、linq to sql 类,在线等!!!

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

LinQ to SQL 查询