加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用dapper将DbGeography插入SQL Server

发布时间:2020-12-15 22:05:30 所属栏目:百科 来源:网络整理
导读:我使用System.Data.Entity.Spatial创建了模型; public class Store{ public int Id { get; private set; } public string Name { get; set; } public string Address { get; set; } public DbGeography Location { get; set; }} 插入数据库 using (SqlConnec
我使用System.Data.Entity.Spatial创建了模型;

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

插入数据库

using (SqlConnection conn = SqlHelper.GetOpenConnection())
{
    const string sql = "INSERT INTO Stores(Name,Address,Location) " + 
                       "VALUES (@Name,@Address,@Location)";
    return conn.Execute(sql,store);                                
}

我得到异常类型System.Data.Entity.Spatial.DbGeography不能用作参数值

我已经尝试过寻找插入的方法,this是我能找到的最好的,但它试图只插入1个参数,我该怎么做才能插入一个有dbgeography成员的对象?

更新#1

我已经放弃了试图破解或扩展内容,因为我对新手来说非常新,时间不在我身边.我回到基本这样做,因为我不需要非常频繁地进行地理数据类型插入

using (SqlConnection conn = SqlHelper.GetOpenConnection())
        {
            var sql = "INSERT INTO Stores (Name,IsActive,Location,TenantId) " +
                      "VALUES('@Name','@Address',@IsActive,geography::Point(@Lat,@Lng,4326),@TenantId);";

            return conn.Execute(sql,new 
            { 
                Name = store.Name,Address = store.Address,IsActive = store.IsActive,Lat = store.Location.Latitude.Value,Lng = store.Location.Longitude.Value,TenantId = store.TenantId
            });             
        }

解决方法

为核心ADO.NET程序集之外的类型添加直接支持是有问题的,因为它要么强制进行大量基于名称的反射,要么膨胀依赖项(并导致版本控制问题).在这里使用IDynamicParameters不是必需的(甚至是适当的IMO) – 相反,ICustomQueryParameter可以用来表示单个参数. DbGeography没有现有的特殊情况检测,因此除非有库更改,否则您必须执行以下操作:

return conn.Execute(sql,new {
    store.Name,store.Address,Location=store.Location.AsParameter()
});

其中AsParameter()是一个扩展方法,它返回一个适当添加它的ICustomQueryParameter实现.

编辑:请点击此处查看有关此内容的更新:https://stackoverflow.com/a/24408529/23354

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读