NHibernate Postgres 空间几何类型变为 NULL



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

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

我按照本教程来设置映射,所以我有:

在 web.config 中

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

对于我添加的 nhibernate 配置

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 属性为空。在日志中,我没有收到异常或错误消息。我不知道还能尝试什么。

在这个问题中,使用MS sql服务器,他让它工作,因为他发现他的当前dll(Microsoft.SqlServer.Types.dll(和所需的dll支持不同版本的mssql,因此将该dll映射到旧版本解决了问题。这里会是这样吗?我该怎么做/怎么做?

我也看过这篇文章,它通过定义他自己的UserTypeConvention为他工作,但我没有定义"UserTypeConvention",所以它对我不起作用。

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

这里的问题是我使用的Npgsql版本(版本3.0.5(。该版本似乎存在问题,无法正确处理几何,因此这就是我得到空的原因。

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

发现的第二个问题是我无法对具有 Identity 列的表进行任何插入,所以我不得不更改方言,点击此链接它对我有帮助。

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

相关内容

最新更新