我有一个带有postGIS的postgresql数据库,我正在使用dotconnect 6.7 for postgreSQL的entity framework。下面是我的数据库中的一张表:
数据库中出现以下约束冲突。
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、Entity Framework还是DotConnect中的一个bug吗?
编辑: 查询语句
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
返回的是SRID 0。所以,无论我在实体框架中指定什么SRID,在数据库中都显示为0。
发生了什么事?
postgresql 6.7
?这根本不存在。(http://www.postgresql.org/support/versioning/)难道是dotconnect 6.7吗?那Postgres和PostGis版本是什么? - Erwin Brandstetter