【发布时间】:2013-07-29 10:33:12
【问题描述】:
我有一个带有 postGIS 的 postgresql 数据库,我正在使用带有 dotconnect 6.7 的实体框架用于 postgreSQL。
在我的数据库中有下表:
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)
但出于某种原因,它似乎接受了一切,无论是更大的还是更小的 srid。
这是 postgresql、实体框架或 dotconnect 中的错误吗?
编辑: 查询
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
返回 srid 0。因此,无论我在实体框架中指定什么 srid,它在数据库中都显示为 0。 怎么回事?
【问题讨论】:
-
postgresql 6.7? Doesn't even exist. 还是那个 dotconnect 6.7?那么 Postgres 和 PostGis 的版本是什么? -
修正了措辞。 PostgreSQL 9.2.4 和 PostGis 2.0.3 r11132。
-
好吧,至少在 postgresql 9.1 和 postgis 1.5 上,我们看到 st_srid = 4326;您想使用查询日志记录并查看 dotconnect 吐出的任何内容
-
我对 postgis 了解不多,但所有失败的 3 个约束表明 st_srid 可能返回 null
-
不知道为什么 st_srid(the_geom)
标签: entity-framework postgresql devart dotconnect