使用Entity Framework保存NpgsqlPoint(Postgresql Point)

时间:2013-07-14 03:07:11

标签: c# postgresql postgis npgsql

我正在尝试将Point Type保存到Postgresql中 我试过这种方式。 (Db表模型定义)

 public NpgsqlPoint Position { get; set; }

我用这个方法设置了对象

  posData.Position = new NpgsqlPoint (34.3244,23.2344);

但是当我在dbContext上调用.SaveChanges时,我得到了一个例外 不是Null Constraint Violation,所以我猜EF正在尝试插入null。

我在输入之前已经对posData.Position进行了调整,并且该对象包含正确的数据。

我搜索了谷歌,但我没有找到任何例子或有同样问题的人。

任何线索?

2 个答案:

答案 0 :(得分:1)

看起来NpgsqlPoint成了PostgreSQL point type。这与PostGIS Extension使用的POINT geometry type相同(例如geometry(Point, 4326))。

要制作PostGIS geometry,您需要xysrid(空间参考ID;例如,请参阅http://spatialreference.org/)。这些可以与ST_MakePoint几何构造函数一起使用,ST_SetSRID可以用于建立空间参考。例如,这是一个参数化命令:

SELECT ST_SetSRID(ST_MakePoint(:long:, :lat:), 4326)

假定WGS84坐标(SRID = 4326)。

答案 1 :(得分:1)

更新:

用于Npgsql的Full Native PostGIS将随3.1版一起发布。 引自npgsql.org version 3 release notes.

  

Npgsql 3.1的主要目标包括:       完整的原生PostGIS支持(#529)

对于那些想要跟上变化的人。 Here is the feature branch conversation。 对2D PostGIS的支持已合并为默认值。

对于Npgsql版本2.x,这是我的回答。

我在Npgsql开发论坛中发布了这个问题,得到了我的答案。

由于实体框架数据类型限制,

EF尚不支持NpgSqlPoint类型。

他们似乎还在努力解决这个问题。