使用Npgsql选择PostgisMultipolygon时超时

时间:2016-04-05 06:24:13

标签: postgis npgsql

在这个例子中,我在开发版本3.1.0-alpha6中使用Npgsql。

我想将PostgisGeometry对象指定为查询中的参数(NpgsqlDbType.Geometry) 然后再次选择对象。

将正确返回Point,MultiPoint,LineString,MultiLineString,Polygon和GeometryCollection等类型的查询。只有一个多边形的PostgisMultiPolygon对象也将正确返回。

但是,它不适用于具有多个多边形的PostgisMultiPolygon。

PostgisMultiPolygon geom1 = new PostgisMultiPolygon(new[]
{
    new PostgisPolygon(new[]
    {
        new[]
        {
            new Coordinate2D(40, 40),
            new Coordinate2D(20, 45),
            new Coordinate2D(45, 30),
            new Coordinate2D(40, 40)
        }
    })
}) {SRID = 4326};
PostgisMultiPolygon geom2 = new PostgisMultiPolygon(new[]
{
    new PostgisPolygon(new[]
    {
        new[]
        {
            new Coordinate2D(40, 40),
            new Coordinate2D(20, 45),
            new Coordinate2D(45, 30),
            new Coordinate2D(40, 40)
        }
    }),
    new PostgisPolygon(new[]
    {
        new[]
        {
            new Coordinate2D(20, 35),
            new Coordinate2D(10, 30),
            new Coordinate2D(10, 10),
            new Coordinate2D(30, 5),
            new Coordinate2D(45, 20),
            new Coordinate2D(20, 35)
        }
    })
}) {SRID = 4326};

using (NpgsqlConnection connection = CreateConnection())
{
    NpgsqlCommand command = connection.CreateCommand();
    command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom1);
    command.CommandText = "Select :p1";
    command.ExecuteScalar();
}

using (NpgsqlConnection connection = CreateConnection())
{
    NpgsqlCommand command = connection.CreateCommand();
    command.Parameters.AddWithValue("p1", NpgsqlDbType.Geometry, geom2);
    command.CommandText = "Select :p1";
    command.ExecuteScalar(); //timeout occurs...
}

如果增加CommandTimeout,则无论如何都会发生超时。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

刚刚合并了此错误的修复程序:https://github.com/npgsql/npgsql/pull/1025