NHibernate Postgres空间几何类型变为NULL

时间:2016-01-31 15:37:27

标签: postgresql nhibernate nhibernate-mapping spatial

我使用postgres / postgis作为db和Nhibernate作为C#项目的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>

对于我添加的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为null。 在日志中,我不会收到异常或错误消息。 我不知道还有什么可以尝试。

在这个question中,使用MS sql server,他得到了它的工作,因为他想出了hist current dll(Microsoft.SqlServer.Types.dll)和所需的一个支持不同版本的Ms sql,所以映射dll到旧版本修复了问题。这可能就是这种情况吗?我怎么样/可以尝试什么?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

我发现的第二个问题是我无法对具有标识列的表进行任何插入,因此我必须更改方言,然后按照link帮助我。

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