【问题标题】:How to use Dapper with MS SQL Server (2012) Geospatial / SQLGeography Column如何将 Dapper 与 MS SQL Server (2012) 地理空间/SQLGeography 列一起使用
【发布时间】:2014-08-28 16:03:08
【问题描述】:

我有一个 SQL Server 2012 数据库,其中的表包含 geography 列,我想在使用该数据库的 .Net 应用程序中使用 Dapper,但据我所知在 Dapper 代码中,“只有”实体框架的 DBGeography 类型是 supported,底层 SQLGeography 数据类型在存储库中没有其他提及。

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

【问题讨论】:

标签: sql sql-server dapper


【解决方案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; }
}

【讨论】:

  • 太棒了,这正是我一直在寻找/希望的 - 谢谢 Marc!
  • @JörgB。如果您遇到任何问题等,请告诉我
  • 会做 - 今天晚些时候会彻底尝试一下。
  • @JörgB。注意:1.34 取代了这一点并包括几何和hierarchyid 支持
  • 当使用 1.34 插入时工作得非常好(我可以在 SSMS 中看到它),但是我无法检索条目 - 我得到一个 System.Data.DataException(请参阅gist.github.com/jbattermann/07308bda78f12645e9e2)。示例应用程序/数据如下所示:gist.github.com/jbattermann/ab4a436c669714e4561b。我引用了 Dapper (1.34) & 和 Microsoft.SqlServer.Types NuGet 包,但该异常抱怨 10.0.0 和 11.0.0 程序集不匹配。在这种情况下,Sql Server 是 SQL Express 2014。是与 dapper 相关还是发生了其他事情?
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
相关资源
最近更新 更多