Как прочитать столбец `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);
Другие вопросы по тегам