我有一个带有geography
列的SQL Server 2008数据库,该列由System.Data.Entity.Spatial.DbGeography
在Entity Framework 6.0.0-alpha3中生成。
现在我需要用SqlDataReader
读取该列。但我不知道该怎么做。使用旧的上下文不是一种选择。我试图将其转换为DbGeography
:
Location = (DbGeography)reader.GetValue(index)
但是我收到了这个错误:
无法转换“Microsoft.SqlServer.Types.SqlGeography”类型的对象 输入'System.Data.Entity.Spatial.DbGeography'
你有什么建议吗?
答案 0 :(得分:2)
嗯,很简单。我只是困惑。但是,我不会删除问题,而是将答案发布给有同样问题的其他人。
// read the value as dynamic:
dynamic temp = reader.GetValue(index);
// the temp contains Lat and Long properties:
var text = string.Format("POINT({0:R} {1:R})", temp.Long, temp.Lat);
// the temp also contains the STSrid as coordinate system id:
var srid = temp.STSrid.Value;
// the rest is really simple:
Location = System.Data.Entity.Spatial.DbGeography.PointFromText(text, srid);
答案 1 :(得分:1)
如果您的地理位置很重要,可以使用:
SELECT MyColumn.Lat,MyColumn.Long ...
reader.GetDouble(0);
reader.GetDouble(1);