小编典典

如何将Dapper与MS SQL Server(2012)地理空间/ SQLGeography列一起使用

sql

我有一个SQL Server 2012数据库,该数据库的表包含一个 地理位置
列,并且我想在使用该数据库的.Net应用程序中使用Dapper,但据我所知,在Dapper代码中,“仅”实体框架DBGeography类型支持,底层SQLGeography数据类型存储库中的任何其他提。

Dapper还是可以“神奇地”处理这些列类型,还是我必须为这些显式编写Dapper.SqlMapper.TypeHandler?


阅读 200

收藏
2021-03-23

共1个答案

小编典典

SqlGeography在下一个发行版中,
再次通过Dapper.EntityFramework软件包添加了对的支持。我还没有构建/部署,因为我对这是否是最适合它的组装有两种看法,但是我也不希望依赖于Microsoft.SqlServer.Types核心库。但是,可能有一种方法可以做到这一点。


更新:现在已将其上移到核心库,因此您不需要任何EF引用或Dapper.EntityFramework; 它应该 工作 ;
这已经被推送为Dapper 1.32

例子:

public void SqlGeography_SO25538154()
{
    Dapper.SqlMapper.ResetTypeHandlers(); // to show it doesn't depend on any
    connection.Execute("create table #SqlGeo (id int, geo geography)");

    var obj = new HazSqlGeo
    {
        Id = 1,
        Geo = SqlGeography.STLineFromText(
            new SqlChars(new SqlString(
                "LINESTRING(-122.360 47.656, -122.343 47.656 )")), 4326)
    };
    connection.Execute("insert #SqlGeo(id, geo) values (@Id, @Geo)", obj);
    var row = connection.Query<HazSqlGeo>(
        "select * from #SqlGeo where id=1").SingleOrDefault();
    row.IsNotNull();
    row.Id.IsEqualTo(1);
    row.Geo.IsNotNull();
}

class HazSqlGeo
{
    public int Id { get; set; }
    public SqlGeography Geo { get; set; }
}
2021-03-23