我有一个带有 postGIS 的 postgresql 数据库,并且我正在为 postgreSQL 使用带有 dotconnect 6.7 的实体框架。
在我的数据库中使用下表:
CREATE TABLE geo
(
the_geom geometry,
id integer NOT NULL,
CONSTRAINT primary_key PRIMARY KEY (id),
CONSTRAINT enforce_srid_geometry CHECK (st_srid(the_geom) = 4326)
)
并运行以下代码
class Program {
static void Main(string[] args) {
using (test_Model.test_Entities ctx = new test_Model.test_Entities()) {
var geom = new test_Model.geo();
geom.id = 0;
geom.the_geom = DbGeometry.PointFromText("POINT (1 1)", 4326).AsBinary();
ctx.geos.AddObject(geom);
ctx.SaveChanges();
}
}
以下约束在数据库中失败
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
好奇数据库注册了什么值,我尝试了以下两个约束
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) > 4326)
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) < 4326)
都没有奏效。由于这些是要比较的整数值,因此最后三个查询中的至少一个应该为真。
过了一会儿,我发现下面的约束让我可以在表中插入 srid=4326 的东西
st_srid(the_geom) <= 4326)
但出于某种原因,它似乎接受了一切,无论是更大的还是更小的 srids。
这是 postgresql、实体框架或 dotconnect 中的错误吗?
编辑:查询
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
返回 srid 0。因此,无论我在实体框架中指定什么 srid,它在数据库中都显示为 0。到底是怎么回事?