【问题标题】:Implementing new NHibernate type for POINT postgresql data type (or any COLUMN of a non-primitive analogous nhibernate type)为 POINT postgresql 数据类型(或非原始类似 nhibernate 类型的任何 COLUMN)实现新的 NHibernate 类型
【发布时间】:2011-04-19 16:06:31
【问题描述】:

我在使用 NHibernate 和 postgresql POINT 数据类型时遇到了问题(尽管我相信这是所有尝试映射 NHibernate SqlTypes 未涵盖的 SQL 类型的人的常见问题)。

我的 Data.Point 类有两个公共浮点数:xcoordinate 和 ycoordinate。

我的第一次尝试是尝试实现 IUserType 接口,但我很快发现问题出现得更早,在映射阶段:

用户代码未处理 MappingException:
无法确定类型:Data.PointUserType,Data.Point,列:NHibernate.Mapping.Column(coordinates)

我对 NHibernate 很陌生,但在我看来,如果数据库中的列是已知类型(float、int、varchar 和所有“经典”类型之一,但不是我需要的几何形状)。

通过映射到坐标 [0] 和坐标 [1],我设法将我的 POINT 映射到两个不同的属性。但这仅对 SELECT 和 UPDATE 查询有用,因为 INSERT postgresql 会抱怨“坐标”不可为空。

另外,我找不到 NHibernate Spatial 扩展的实际版本,我更愿意控制我的 POINT 类型,因为我很少使用这种类型,因此我宁愿不加载整个 NHibernate Spatial 程序集(假设它们正在积极开发,否则我无论如何都会远离它们)。

我最后的想法是我需要弄乱 NHibernate 的 SQL 生成(因为插入 SQL 的某些部分将是 '(a, b)'::point,非常具体),也许这有点太麻烦了(也许不是,我愿意检查一下)。

我对 NHibernate 还很陌生,但我越来越绝望了。 谁能指点我的地方?

【问题讨论】:

  • 我知道有点晚了,但你能做到吗?我正在尝试在 Nhibernate 中映射 postgresql Point 类型,无论有无 NH.Spatial,我一直在寻找您的问题。
  • 确实有,不过有一些需要注意的地方。在 gmail dot com 的 mzabani 与我联系。

标签: .net sql nhibernate nhibernate-mapping sql-types


【解决方案1】:

我最近让 nHibernate 与 SQL Server 2008 一起工作。要了解如何查看此问题:NHibernate.Spatial and Sql 2008 Geography type - How to configure

如果您包含映射文件,会更容易提供帮助。我想知道您是否正确注册了 IUserType?它应该看起来像这样

<class name="WhereAmI">
    <property name="Point">
        <type name="MyProject.MyPointUserType, MyProject">
        </type>
    </property>
</class>

还可以考虑查看以下适用于 MS SQL Servier 2008 的 IUserType 实现:NHibernate.Spatial.Type.GeometryType

【讨论】:

  • 感谢您的回答,最近发布了 NHibernate Spatial 版本(经过很长时间)。似乎 Spatial 正在开发中(不过,发布的频率并不高)。但是,我宁愿实现自己的 POINT 数据类型,也不愿包含大量库来管理这种我将很少使用的类型。对此有什么想法吗?
  • 我没有资格评论滚动你自己的,因为我从来没有这样做过。但是,我快速浏览了 nHibernate.Spatial 代码,它看起来并不简单。那么自己滚动的好处值得吗?我怀疑不是
  • 这是一个很好的观点,我担心会出现这种情况(实现我想要的不是微不足道的)。在这种情况下,我必须选择使用原始 SQL 进行插入,而使用 NHibernate 通过映射到坐标 [0] 和坐标 [1] 或使用 Spatial 来完成 SELECT 和 UPDATE。你怎么看?
  • 我面临同样的决定,我选择了 Spatial。我觉得始终使用 nHibernate 比做不同的事情要好。
猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多