Как читать/записывать географические данные с помощью C#, Entity Framework и SQL Server 2008?

У меня есть форма, из которой пользователь сможет ввести широту и долготу определенной точки на карте. Данные будут вводиться как строковые значения. Я провел небольшое исследование и узнал из разных источников, что Entity Framework не поддерживает типы данных geography.

  • Как я могу анализировать и/или сохранять строковые данные в столбец geography в базе данных?
  • Как я могу получить к нему доступ и повторно проанализировать его как строку после ее сохранения?

Заранее спасибо!


person Filip Filipović    schedule 18.05.2012    source источник
comment
Обратитесь по этой ссылке. stackoverflow.com/questions/23292268/   -  person Raja Mouli Ankireddy    schedule 11.01.2016


Ответы (1)


На самом деле компоненты Entity Framework 5, поставляемые с .NET Framework 4.5, действительно поддерживают пространственные типы. Взгляните на это пошаговое руководство.

РЕДАКТИРОВАНИЕ С EF6 вы можете использовать пространственные типы как в .NET Framework 4, так и в .NET Framework 4.5.

person Pawel    schedule 18.05.2012
comment
Отличная статья. Спасибо, что порекомендовали это. - person Filip Filipović; 19.05.2012
comment
Итак, проблема, которую я вижу, заключается в том, что я держу свой POCOS как можно более чистым, оставляя все ссылки/зависимости на структуру сущностей и хранилище постоянства, насколько это возможно, а затем имею набор или классы репозитория, которые знают о хранилище постоянства. Я также держусь подальше от атрибутов DataAnnotation, используя свободную конфигурацию. Как только вы поместите DbGeography, вам нужно «использовать System.Data.Entity», что нарушает подход, не зависящий от сохраняемости, по крайней мере, для объекта Plain Old C#. - person Stephen York; 10.12.2015
comment
.NET не имеет собственного пространственного типа, так как еще вы могли бы это сделать? Вы, очевидно, могли бы немного взломать, не используя пространственные типы EF, а byte[] для пространственных свойств в ваших объектах, но тогда вам все равно нужно было бы каким-то образом перевести его в byte[] и из него, чтобы сделать его пригодным для использования. - person Pawel; 11.12.2015