使用 dapper 查询空间数据

2024-03-20

我找到了一些相关的问题 https://stackoverflow.com/questions/18088169/dapper-spatial-geography-type,但作者放弃了,继续使用存储过程来进行“映射”。

这实际上是一个延续问题here https://stackoverflow.com/questions/24402424/how-to-insert-dbgeography-to-sql-server-using-dapper

Model

public class Store
{
    public int Id { get; private set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public DbGeography Location { get; set; }
}

Querying

using (SqlConnection conn = SqlHelper.GetOpenConnection())
{
    const string sql = "Select * from Stores";
    return conn.Query<Store>(sql, new { Tenant_Id = tenantId });
}

Dapper 不理解空间数据,正如许多人所说,支持供应商特定实现并不是作者的初衷。但扩展的文档Query<T>很难找到支持


我对此有一个探索here https://github.com/StackExchange/dapper-dot-net/commit/e26ee0abe5bdff561ff59fded87cabb9f5d983a1,以下测试通过:

class HazGeo
{
    public int Id { get;set; }
    public DbGeography Geo { get; set; }
}
public void DBGeography_SO24405645_SO24402424()
{
    global::Dapper.SqlMapper.AddTypeHandler(typeof(DbGeography), new GeographyMapper());
    connection.Execute("create table #Geo (id int, geo geography)");

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

class GeographyMapper : Dapper.SqlMapper.TypeHandler<DbGeography>
{
    public override void SetValue(IDbDataParameter parameter, DbGeography value)
    {
        parameter.Value = value == null ? (object)DBNull.Value : (object)SqlGeography.Parse(value.AsText());
        ((SqlParameter)parameter).UdtTypeName = "GEOGRAPHY";
    }
    public override DbGeography Parse(object value)
    {
        return (value == null || value is DBNull) ? null : DbGeography.FromText(value.ToString());
    }
}

It looks可行,但我还没有在每个 i 上加点并在每个 t 上划线。欢迎您在本地尝试该提交 - 我希望得到反馈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dapper 查询空间数据 的相关文章

随机推荐

  • 如何通过 Puppeteer 获取元素的子元素

    我明白那个puppeteer拥有自己的手柄而不是标准手柄DOM元素 但我不明白为什么我不能通过找到的元素继续相同的查询 const els await page div parent for let i 0 i lt els length
  • Android模拟器SDCard因某种原因被删除

    我在 AVD 中创建了一个 3 2 使用 Google API 设备 但是 我最近似乎无法使用 SDCard 在使用时 Environment getExternalStorageState 我收到 已删除 如何重新安装 撤消删除 SD 卡
  • 使用 aws-cli 创建 api-gateway lambda 集成

    我需要使用 aws 客户端创建一个 api 网关 我使用 Web 控制台成功创建并集成了我的 aws lambda 函数 但我对 aws client 感到困惑 这些是我遵循的步骤 创建 api 网关并使用 Web 控制台与我的示例 lam
  • 如何用笑话模拟猫鼬链接查询

    在测试套件上我想用链接方法模拟模型findOne then select 登录服务 public loggingIn async loginDTO LoginDTO gt const user await UserModel findOne
  • Visual Studio 团队服务部署/构建证书错误

    我正在尝试使用 VSTS Visual studio 团队在线服务 中的持续集成和部署功能构建一个单击一次应用程序我们正在尝试使用托管代理 Visual studio 2015 构建此应用程序我们在使用强名称密钥文件签名时遇到了困难的错误
  • ORA-00060: 等待资源时检测到死锁

    我有一系列脚本作为 nohup 在托管 Oracle 10g 的 AIX 服务器上并行运行 这些脚本是由其他人编写的 旨在同时执行 所有脚本都在表上执行更新 我收到错误 ORA 00060 检测到死锁 等待资源 当我用谷歌搜索这个时 我发现
  • 如何插入包含页码、文件路径和图像的页脚?

    I m trying to format the footer so it has the page x out of y on the top right of the footer and then the image centered
  • 使用 Velocity 和 Jasmine 测试 Meteor 时需要超时

    对于流星 速度和茉莉花来说还很陌生 所以不确定我是否做错了什么 使用茉莉花来做它不适合的事情 或者这只是它的工作方式 我发现我需要为几乎所有测试设置超时才能让它们通过 应该是这种情况还是我做错了什么 例如 我正在运行一些测试来检查验证消息
  • 当列表项很少时,如何将页脚视图显示到屏幕末尾?

    我想向列表视图添加页脚 当列表项数量较多时 页脚效果很好 但是当列表视图的项目很少时 页脚会显示在屏幕中间 就在列表视图的下方 这看起来很破旧 在这种情况下 我希望页脚与父底部对齐 谢谢你的期待 这是你想要的最简单的例子 你可以自定义它
  • cocos2d中忽略精灵的透明区域

    我已经被困了好几个星期了 现在试图找出如何忽略对精灵透明区域的触摸 我一直在尝试使用本教程来跟踪像素完美碰撞 http www learn cocos2d com 2011 12 fast pixelperfect collision de
  • Python 单元测试 - 如何修补我正在测试的方法内部的异步调用

    我使用 unittest mock 为我的 python 代码构建测试 我有一个正在尝试测试的方法 其中包含对另一个函数的异步调用 我想修补该异步调用 以便我可以让 Mock 返回一个测试值asset id 而不是实际调用异步方法 我尝试了
  • std::memory_order_seq_cst 的工作原理

    我从以下位置获取了有关 std memory order seq cst 的示例 http en cppreference com w cpp atomic memory order http en cppreference com w c
  • HTML 输入换行文本而不是水平溢出

    我有一个input字段 用户将在其中输入文本 当文本变得太长时 输入字段会水平延伸 而不是垂直下降 我尝试添加这个CSS overflow hidden word wrap break word 但我没有运气 关于如何实现这一目标还有其他建
  • 在 VBA (Excel) 中获取时区信息

    我想在 VBA 中确定不同国家 地区在特定日期的 GMT UTC 时间偏移 包括夏令时 有任何想法吗 编辑 来自自我回答 谢谢 0xA3 我快速浏览了链接页面 我假设您只能获取 Windows 运行所在本地的 GMT 偏移量 Convert
  • 如何构建一个 GUI 以在 jupyter 笔记本中使用?

    这个想法是能够在笔记本中构建和使用 GUI 因此使用具有大量参数的长函数比仅在笔记本中键入字符更有效 显然不是具体细节 但如果有人可以指出一些可能有帮助的库 项目 链接或任何资源 我查遍了互联网 到目前为止什么也没有 PyData 中有一个
  • git clone 不签出活动分支

    我有一个远程裸存储库 有两个分支 master 和 testing 其中 HEAD 指 testing 克隆此存储库时 git 检查 master 如果 master 和 testing 位于同一修订版上 即 HEAD test maste
  • Eclipse 任务为空

    我正在使用 Eclipse Helios 并在我的 java 类中添加了一些任务 使用 TODO blah blah 在行计数附近 我有一个小图标 表明任务已被识别 但我在任务视图中看不到它们 我尝试了任务视图和任务列表视图 它们是空的 但
  • 如何在量角器中调用另一个函数中的函数

    第一个功能 describe Shortlisting page function it Click on candidate status Screened function element by css i flaticon lefta
  • 以编程方式将下拉列表添加到特定单元格

    我想知道如何使用 VBA 以编程方式将下拉列表添加到 Excel 工作表的特定单元格 例如 我希望能够向单元格 i j 添加下拉列表并定义列表的元素 以编程方式执行此操作 With Selection Validation Delete A
  • 使用 dapper 查询空间数据

    我找到了一些相关的问题 https stackoverflow com questions 18088169 dapper spatial geography type 但作者放弃了 继续使用存储过程来进行 映射 这实际上是一个延续问题he