使用实体框架保存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(PostgresqlPoint)

看起来NpgsqlPoint生成了PostgreSQL point类型。这与PostGIS扩展使用的POINT geometry类型(例如geometry(Point, 4326))不同。

要制作PostGIS geometry,您需要xysrid(空间参考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类型。

看来他们还在做这个。