私はpostGISでpostgresqlデータベースを持っていますが、PostgreSQL用にdotconnect 6.7でエンティティフレームワークを使用しています。postGISとエンティティフレームワーク、CHECK制約の問題を伴う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)
)
と何の価値について次の制約がデータベースに
CONSTRAINT enforce_srid_the_geom 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();
}
}
を実行している:私のデータベースに次の表では
データベースを登録しましたが、次の2つの制約がありました。
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) > 4326)
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) < 4326)
どちらも機能しません。これらは比較される整数値なので、最後の3つのクエリの少なくとも1つが真であったはずです。
は、しばらくして、私は次の制約は私がテーブルst_srid(the_geom) <= 4326)
にSRID = 4326で何かを挿入できますが、いくつかの理由のためにすべて、両方の大小のSRIDを、受け入れるように見えることがわかりました。
これはpostgresql、エンティティフレームワーク、またはdotconnectのバグですか?
編集: クエリ
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のバージョンは何ですか? –
文言が修正されました。 PostgreSQL 9.2.4およびPostGis 2.0.3 r11132です。 – user1815201
少なくとも、postgresql 9.1とpostgis 1.5では、st_srid = 4326が表示されています。クエリのロギングを使用し、dotconnectによって吐き出されているものが何であるかを確認したい –