【问题标题】:NHibernate Postgres spatial geometry type become NULLNHibernate Postgres 空间几何类型变为 NULL
【发布时间】:2016-02-19 05:21:44
【问题描述】:

我在 C# 项目中使用 postgres/postgis 作为 db 和 Nhibernate 作为 ORM。

这是我第一次尝试将 postgis 映射到 .Net 应用程序。我的设置使用 NHibernate 版本 4.0.4.4000 和 NHibernate.Spatial.PostGis 4.0.4.4000(使用 Npgsql 版本 3.0.5)

为了设置映射,我关注了this tutorial,所以我有:

在 web.config 中

<property name="dialect">NHibernate.Spatial.Dialect.PostGisDialect,NHibernate.Spatial.PostGis</property>

对于我添加的休眠配置

cfg.AddAuxiliaryDatabaseObject(new SpatialAuxiliaryDatabaseObject(cfg));

我的 xml 映射文件有以下映射:

<property name="Geom" column="the_geom" type="NHibernate.Spatial.Type.GeometryType, NHibernate.Spatial" />

also tried using PostGis namespace in the mapping:

<property name="Geom" column="the_geom">
    <type name="NHibernate.Spatial.Type.PostGisGeometryType, NHibernate.Spatial.PostGis">
        <param name="srid">3006</param>
        <param name="subtype">POLYGON</param>
    </type>
</property> 

我的模型类具有以下属性

public virtual IGeometry Geom { get; set; }

现在,当我获取任何几何图形时,属性 Geom 为空。 在日志中,我没有收到异常或错误消息。 我不知道还能尝试什么。

在这个question 中,他使用MS sql 服务器,因为他发现hist 当前的dll (Microsoft.SqlServer.Types.dll) 和所需的一个支持不同版本的Ms sql,所以映射了那个dll到旧版本解决了这个问题。这里会是这样吗?如何/我可以尝试什么?

我还查看了this post,它通过定义他自己的 UserTypeConvention 对他有用,但我没有定义“UserTypeConvention”,所以它对我不起作用。

我已尝试在gis stackexchange 发布此问题但没有结果,所以我在这里尝试。

【问题讨论】:

    标签: postgresql nhibernate nhibernate-mapping spatial


    【解决方案1】:

    这里的问题是我使用的 Npgsql 版本(版本 3.0.5)。 该版本似乎存在问题,并且无法正确处理 Geometry,所以这就是我得到 null 的原因。

    降级到 Npgsql 的 2.2.7 版,它就可以工作了。

    我发现的第二个问题是我无法对具有标识列的表执行任何插入操作,因此我不得不更改方言,遵循 link 这对我有帮助。

    我还需要说明,如果不是在rsquare 的帮助下我无法解决这个问题,他是在 nhibernte 和 Npgsql 3.x 版本之间实际发现这个问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多