我正在尝试将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进行了调整,并且该对象包含正确的数据。
我搜索了谷歌,但我没有找到任何例子或有同样问题的人。
任何线索?
答案 0 :(得分:1)
看起来NpgsqlPoint
成了PostgreSQL point
type。这不与PostGIS Extension使用的POINT geometry
type相同(例如geometry(Point, 4326)
)。
要制作PostGIS geometry
,您需要x
,y
和srid
(空间参考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类型。
他们似乎还在努力解决这个问题。