Ho un database postgresql con postGIS e sto utilizzando il framework di entità con dotconnect 6.7 per postgreSQL.Postgresql con postGIS e framework di entità, problema di vincolo CHECK
Con la seguente tabella nel mio database:
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)
)
e l'esecuzione del seguente codice
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();
}
}
il seguente vincolo fallisce nel database
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
curioso a quale valore della database registrato, ho provato ad avere i seguenti due vincoli
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) > 4326)
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) < 4326)
Nessuno dei due ha funzionato. Poiché questi sono valori interi da confrontare, almeno una delle ultime tre query avrebbe dovuto essere vera.
Dopo un po 'ho trovato che il seguente vincolo mi permette inserisco qualcosa con SRID = 4326 nella tabella
st_srid(the_geom) <= 4326)
ma sembra accettare tutto, sia SRID grandi e piccoli, per qualche ragione.
Si tratta di un bug in postgresql, entità framework o dotconnect?
Edit: La query
SELECT st_srid(the_geom) FROM geo WHERE geo.id == 0
restituisce lo srid 0. Quindi, non importa quello che srid dò specificare in Entity Framework, appare come 0 nel database. Cosa sta succedendo?
'postgresql 6.7'? [Non esiste nemmeno.] (Http://www.postgresql.org/support/versioning/) O è dotconnect 6.7? Allora quali sono le versioni Postgres e PostGis? –
Risolto il problema. PostgreSQL 9.2.4 e PostGis 2.0.3 r11132. – user1815201
Beh, almeno su postgresql 9.1 e postgis 1.5, stiamo visualizzando st_srid = 4326; dovresti usare la registrazione delle query e vedere qualsiasi cosa venga sputata da dotconnect –