【发布时间】:2015-01-08 10:36:01
【问题描述】:
我正在尝试通过 ado.net 插入 DBGeography 类型,但没有成功。
这是我得到的错误:
对象类型不存在映射 System.Data.Entity.Spatial.DbGeography 到已知的托管提供者 本机类型。
或:
指定的类型未在目标上注册 server.System.Data.Entity.Spatial.DbGeography,EntityFramework, 版本=6.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089。
这是我从 db 获取它时所做的,并且效果很好:
dynamic temp = reader.GetValue(3);
var text = string.Format("POINT({0:R} {1:R})", temp.Long, temp.Lat);
var srid = temp.STSrid.Value;
this.Coordinates = System.Data.Entity.Spatial.DbGeography.PointFromText(text, srid);
但是插入不起作用:
updateCommand.Parameters.AddWithValue("@Coordinates", store.Coordinates);
// or ...
SqlParameter p = new SqlParameter();
p.ParameterName = "@Coordinates";
p.Value = store.Coordinates;
p.SqlDbType = System.Data.SqlDbType.Udt;
p.UdtTypeName = "geography";
updateCommand.Parameters.Add(p);
这里有什么问题?
【问题讨论】:
-
我已经尝试了 stackverflow 的所有解决方案,但都没有成功
-
从错误“指定类型未在目标服务器上注册”,似乎缺少某些包。您是否尝试重新安装?你检查了这个链接吗? - github.com/Glimpse/Glimpse/issues/646
-
你解决过这个问题吗?您可以尝试使用 Microsoft.SqlServer.Types 而不是 System.Data.Entity ....
-
您可以使用SqlCommandBuilder 避免构建命令的所有猜测。同样,您可以使用SqlGeographyBuilder 避免字符串操作的所有丑陋。对不起,双重链接......:O)
标签: c# sql-server entity-framework ado.net sqlgeography