使用实体框架保存NpgsqlPoint(PostgresqlPoint)
本文关键字:PostgresqlPoint NpgsqlPoint 保存 实体 框架 | 更新日期: 2023-09-27 18:22:24
我正在尝试将点类型保存到Postgresql中我试过这种方法。(Db表模型定义)
public NpgsqlPoint Position { get; set; }
我用这个方法设置对象
posData.Position = new NpgsqlPoint (34.3244,23.2344);
但是当我在dbContext上调用.SaveChanges时,我得到了一个异常非Null约束冲突,所以我猜EF正试图插入一个Null。
在进入之前,我已经调试了posData.Position,对象包含正确的数据。
我在谷歌上搜索过,但没有发现任何例子或有人有同样的问题。
有线索吗?
看起来NpgsqlPoint
生成了PostgreSQL point
类型。这与PostGIS扩展使用的POINT geometry
类型(例如geometry(Point, 4326)
)不同。
要制作PostGIS geometry
,您需要x
、y
和srid
(空间参考ID;例如,请参阅http://spatialreference.org/)。这些可以与ST_MakePoint几何体构造函数和strongetRID一起使用,以建立空间参照。例如,这里有一个参数化命令:
SELECT ST_SetSRID(ST_MakePoint(:long:, :lat:), 4326)
其假定WGS84坐标(SRID=4326)。
更新:
Npgsql的完整原生PostGIS计划与3.1版一起发布。引用npgsql.org第3版发行说明。
Npgsql 3.1的主要目标包括:完整的本地PostGIS支持(#529)
对于那些想跟上变化的人来说。这是功能分支对话。对2D PostGIS的支持已合并为默认支持。
对于Npgsql 2.x版本,这是我以前的答案
我在Npgsql开发论坛上发布了这个问题,并得到了我的答案。
由于实体框架数据类型限制,EF尚未支持NpgSqlPoint类型。
看来他们还在做这个。