У меня есть база данных postgresql с postGIS, и я использую структуру сущностей с 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)
но, похоже, он принимает все, как большие, так и маленькие сриды, по какой-то причине.
Это ошибка в postgresql, фреймворке сущностей или dotconnect?
Изменить: запрос
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
возвращает srid 0. Итак, независимо от того, какой srid я указываю в структуре сущностей, он отображается как 0 в базе данных. Что здесь происходит?
postgresql 6.7? Даже не существует Или это dotconnect 6.7? Тогда каковы версии Postgres и PostGis? - person Erwin Brandstetter   schedule 01.08.2013