[英]C# MySql Dapper MySqlGeometry
I am trying to get the Polygon as MySqlGeometry using Dapper.我正在尝试使用 Dapper 将多边形作为 MySqlGeometry。
But the MySql connector understands only MySqlGeometry as Point.但是 MySql 连接器仅将 MySqlGeometry 理解为 Point。
And I need the other types also, like Polygon.我还需要其他类型,比如多边形。
This is what I got from other forums:这是我从其他论坛得到的:
// 1. Add Dapper custom Type handler.
Dapper.SqlMapper.AddTypeHandler(new MySqlGeometryTypeHandler());
// 2. Implement that custome handler.
public class MySqlGeometryTypeHandler : SqlMapper.TypeHandler<MySqlGeometry>
{
public override MySqlGeometry Parse(object value) { return new MySqlGeometry(MySqlDbType.Geometry, (byte[])value); }
public override void SetValue(System.Data.IDbDataParameter parameter, MySqlGeometry value) { parameter.Value = value; }
}
// 3. Here is the Data class
public class Geo
{
public int Id { get; set; }
public MySqlGeometry G { get; set; }
}
// 4. Here is the Dapper query
List<Geo> datas = Dapper.SqlMapper.Query<Geo>(cnn, "select * from geo;").ToList();
How do I get the Polygon rows I have in the 'geo' table?如何获取“地理”表中的多边形行?
It comes out - MySqlGeometry doesn't support (hopefully yet) other types than Point.结果出来了——MySqlGeometry 不支持(希望还)除 Point 之外的其他类型。
So the solution I got is:所以我得到的解决方案是:
public class Geo
{
public int Id { get; set; }
public DbGeography G { get; set; }
}
public class DbGeographyTypeHandler : SqlMapper.TypeHandler<DbGeography>
{
public override DbGeography Parse(object value) { return DbGeography.FromBinary((byte[])value); }
public override void SetValue(IDbDataParameter parameter, DbGeography value) { parameter.Value = value.AsBinary(); }
}
Dapper.SqlMapper.AddTypeHandler<DbGeography>(new DbGeographyTypeHandler());
List<Geo> datas = Dapper.SqlMapper.Query<Geo>(conn, "select id, st_aswkb(g) g from geo;").ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.