2016-01-31 71 views
0

我使用postgres/postgis作爲db和Nhibernate作爲C#項目的ORM。NHibernate Postgres空間幾何類型變爲NULL

這是我第一次嘗試將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映射文件具有以下映射NHibernate的配置:

<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服務器,他得到了它的工作,因爲他發現,當前dll(Microsoft.SqlServer.Types.dll)和所需的支持不同版本的Ms sql,因此將該dll映射到舊版本修復了這個問題。這可能是這種情況嗎?我該怎麼辦?

我也看過this post它在哪裏工作,他定義了自己的UserTypeConvention,但我沒有定義「UserTypeConvention」,所以它不適用於我。

我已經嘗試在gis stackexchange發佈這個問題沒有結果,所以我在這裏嘗試。

回答

1

這裏的問題是我使用的Npgsql版本(版本3.0.5)。 該版本似乎有問題,並且不能正確處理幾何圖形,所以我得到空值。

降級到Npgsql 2.2.7版本,它的工作原理。

我發現的第二個問題是,我無法對具有標識列的表執行任何插入操作,因此我必須更改方言,在此之後幫助我做了這個link

我還需要聲明,如果它不是在rsquare的幫助下解決了這個問題,他是在Npgsql的nhibernte和3.x之間真正發現此問題的人。

相關問題