使用实体框架/休眠与 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 地理数据类型的主要内容,如果未能解决你的问题,请参考以下文章
在 sql server 2008 中使用地理数据类型的两点之间的距离?
NHibernate.Spatial 和 Sql 2008 地理类型 - 如何配置