Как прочитать столбец `geography` с помощью`SqlDataReader`?
У меня есть база данных SQL Server 2008 с geography
столбец, который генерируется System.Data.Entity.Spatial.DbGeography
в Entity Framework 6.0.0-альфа3.
Теперь мне нужно прочитать этот столбец с SqlDataReader
, Но я понятия не имею, как это сделать. Использование старого контекста не вариант. Я пытался сделать это как DbGeography
:
Location = (DbGeography)reader.GetValue(index)
Но я получаю эту ошибку:
Невозможно привести объект типа "Microsoft.SqlServer.Types.SqlGeography" к типу "System.Data.Entity.Spatial.DbGeography".
Есть ли у вас предложения?
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);
Если ваша география имеет значение, вы можете использовать:
ВЫБЕРИТЕ MyColumn.Lat, MyColumn.Long ...
reader.GetDouble(0);
reader.GetDouble(1);