使用实体框架/休眠与 sql2008 地理数据类型

Posted

技术标签:

【中文标题】使用实体框架/休眠与 sql2008 地理数据类型【英文标题】:using entity framework/nhibernate with sql2008 geography datatype 【发布时间】:2008-10-16 08:35:25 【问题描述】:

我用的是sql express 2008和vs2008,用c#写的。

我有一个包含地理列的数据库表,我需要将我收集的 gps 数据放入其中。当我尝试为该表创建实体框架映射时,它只是忽略了该列,并带有一些关于无法映射此类列类型的警告。 然后我查看了 nHibernate.Spatial 项目,但它似乎只翻译几何类型,而不是地理。那里没有运气。 有人告诉我,我可以使用将 Geography 转换为 VarBinary 的视图,然后在创建的实体类中添加另一个将二进制反序列化回 Geography 的属性。我想这将适用于从数据库中读取数据,但我还需要将这些行插入到我的数据库中,并且我无法将行添加到视图中。 我可以使用其他一些技巧来在我的 c# 代码中轻松地从我的数据库中读取和写入地理数据吗?

【问题讨论】:

使用 NHibernate,您可以使用 NHibernate.Spatial 进行更好的映射。 据我所知,NHiberate.Spatial 仅支持几何类型 【参考方案1】:

我对 EF 了解不多,但是 NHibernate 允许您使用 IUserType 扩展它的类型框架。 Ray Houston's Blog 上有一些关于它的信息。

我已经成功地使用它创建了一个类型,该类型使用 XmlSerialization 到 Xml 字段,基于 Ayende's example

【讨论】:

【参考方案2】:

此时 Entity Framework v1 不支持 SQL UDT - 2008 Spacial 类型为 UDT。

您可以使用 WKB (byte[]/varbinary) 存储您的 long/lat 数据。

附带说明一下,在 Microsoft MIX09 的下一版本(1.5 CTP)期间,我没有注意到对 UDT 的任何支持。也许我错过了什么。

【讨论】:

以上是关于使用实体框架/休眠与 sql2008 地理数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Bing Maps API - SQL - 几何与地理类型

在 sql server 2008 中使用地理数据类型的两点之间的距离?

NHibernate.Spatial 和 Sql 2008 地理类型 - 如何配置

存储过程中返回的地理列未显示在实体框架自动生成的复杂类型中

Visual Studio 2010 数据库项目无法识别 SQL 2008 地理数据类型

SQL Server 2008 - 从记录中获取地理位置