public void TestSTLength()
        {
            using (var db = new PostGisTestDataConnection(TestDatabaseConnectionString))
            {
                const string Ewkt1 = "SRID=2249;LINESTRING(743238 2967416,743238 2967450,743265 2967450, 743265.625 2967416,743238 2967416)";
                db.TestGeometries
                .Value(g => g.Id, 1)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt1))
                .Insert();

                const string Ewkt2 = "SRID=2249;POINT(0 0)";
                db.TestGeometries
                .Value(g => g.Id, 2)
                .Value(g => g.Geometry, () => GeometryInput.STGeomFromEWKT(Ewkt2))
                .Insert();
                db.TestGeometries
                .Value(g => g.Id, 3)
                .Value(g => g.Geometry, () => null)
                .Insert();

                var length1 = db.TestGeometries
                              .Where(g => g.Id == 1)
                              .Select(g => g.Geometry.STLength())
                              .Single();
                Assert.AreEqual(122.630744000095, length1.Value, 0.000000000001);

                var length2 = db.TestGeometries
                              .Where(g => g.Id == 1)
                              .Select(g => g.Geometry.STLength2D())
                              .Single();
                Assert.AreEqual(122.630744000095, length2.Value, 0.000000000001);

                Assert.AreEqual(0.0,
                                db.TestGeometries
                                .Where(g => g.Id == 2)
                                .Select(g => g.Geometry.STLength())
                                .Single());
                Assert.IsNull(
                    db.TestGeometries.Where(g => g.Id == 3)
                    .Select(g => g.Geometry.STLength())
                    .Single());

                Assert.AreEqual(
                    122.630744000095,
                    db.Select(() => MeasurementFunctions.STLength(Ewkt1)).Value,
                    0.000000000001);

                Assert.AreEqual(
                    122.630744000095,
                    db.Select(() => MeasurementFunctions.STLength2D(Ewkt1)).Value,
                    0.000000000001);

                Assert.IsNull(db.Select(() => MeasurementFunctions.STLength((NTSG)null)));


                var PolygonGeographyWkt = "SRID=4326;LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)";
                db.TestGeographies
                .Value(g => g.Id, 1)
                .Value(g => g.Geography, () => GeometryInput.STGeographyFromText(PolygonGeographyWkt))
                .Insert();

                var perimeter1 = db.TestGeographies
                                 .Where(g => g.Id == 1)
                                 .Select(g => g.Geography.STLength())
                                 .Single();

                Assert.AreEqual(34310.57036, perimeter1.Value, 1.0E-5);

                var perimeter2 = db.TestGeographies
                                 .Where(g => g.Id == 1)
                                 .Select(g => g.Geography.STLength(false))
                                 .Single();

                Assert.AreEqual(34346.20609, perimeter2.Value, 1.0E-5);
            }
        }