Linq2Sql或EF4中支持空间数据类型

Col*_*ond 20 entity-framework spatial linq-to-sql

有没有人知道(理想情况下,参考),LinqToSQL或EntityFramework v4的VS2010版本是否支持SQL 2008空间数据类型的查询?

Chr*_*ann 24

这是一个解决方法,让它在Entity Framework/LINQ to Entities中运行:

您可以使用数据库视图返回Well-Known-Text(在查询中使用"geometry.ToString()")或Binary.然后,一旦返回结果行,只需将字符串/二进制文件转换为.NET中的SqlGeometry对象.

以下是用于构建View的示例查询,该View将几何类型的"Location"字段转换为Well-Known-Text字符串:

SELECT ID, Name, Location.ToString() as Location FROM MyTable
Run Code Online (Sandbox Code Playgroud)

以下是查询具有"位置"字段的结果实体的示例,该字段包含"geography"对象的Well-Known-Text或String表示:

var e = new MyApp.Data.MyDataEntities(connectionString);
var items = from i in e.MyTables
            select i;

foreach (var i in items)
{
    // "Location" is the geography field
    var l = SqlGeography.Parse(i.Location);
    var lat = l.Lat;
    var lng = l.Long;
}
Run Code Online (Sandbox Code Playgroud)

还有一件事是,您需要在存储过程中执行任何基于空间的查询,因为您不希望将表中的所有数据都拉入.NET,以便使用LINQ执行您自己的空间查询.

这不是本地支持SQL Spatial Types的优势,但它可以让您同时运行Entity Framework和SQL Spatial.

  • 我们将这些东西存储为Lat/Lng浮点列,并使用触发器创建地理列值.这让我们可以两种方式 - 获取/设置的类型,以及SP中的空间查询. (8认同)

Ale*_*mes 11

在EF 4.0中,您可以使用自定义函数的组合来一起破解某些东西,并假装空间类型实际上是二进制类型.这是我正在考虑的东西,并尝试并添加到我的提示系列.但到目前为止,即使是黑客也未经证实.:(

至于直接支持,遗憾的是L2S或EF v4都不支持VS2010时间帧中的空间类型.

Alex James

实体框架项目经理.

  • 好吧,我不会说优先级太低.我认为这是一个高度优先事项.但我会说它不像我们最终做的那些事情那么高,比如POCO,FKs,Model First等. (2认同)
  • EF何时获得空间类型支持?VS'2012; 他们被添加到SQL Server后仅4年? (2认同)