Поддержка пространственных типов была введена в Entity Framework 5. Также включен набор операторов, позволяющих запросам анализировать пространственные данные. Например, запрос может фильтроваться на основе расстояния между двумя географическими точками.
-
Entity Framework позволит новым пространственным типам данных отображаться в виде свойств в ваших классах и отображать их в пространственные столбцы в вашей базе данных.
-
Вы также сможете писать запросы LINQ, использующие пространственные операторы для фильтрации, сортировки и группировки на основе пространственных вычислений, выполненных в базе данных.
Entity Framework позволит новым пространственным типам данных отображаться в виде свойств в ваших классах и отображать их в пространственные столбцы в вашей базе данных.
Вы также сможете писать запросы LINQ, использующие пространственные операторы для фильтрации, сортировки и группировки на основе пространственных вычислений, выполненных в базе данных.
Существует два основных типа пространственных данных:
-
Географический тип данных хранит эллипсоидальные данные, например, координаты широты и долготы GPS.
-
Тип данных геометрии представляет евклидову (плоскую) систему координат.
Географический тип данных хранит эллипсоидальные данные, например, координаты широты и долготы GPS.
Тип данных геометрии представляет евклидову (плоскую) систему координат.
Давайте посмотрим на следующий пример игры в крикет.
Шаг 1 — Создать новый проект из меню Файл → Создать → Проект.
Шаг 2 — На левой панели выберите Консольное приложение.
Шаг 3 — Щелкните правой кнопкой мыши на имени проекта и выберите «Управление пакетами NuGet»…
Шаг 4 — Установите Entity Framework.
Шаг 5. Добавьте ссылку на сборку System.Data.Entity, а также добавьте выражение System.Data.Spatial, используя оператор для пространственных типов данных.
Шаг 6 — Добавьте следующий класс в файл Program.cs.
public class CricketGround { public int ID { get; set; } public string Name { get; set; } public DbGeography Location { get; set; } }
Шаг 7 — Помимо определения сущностей, вам нужно определить класс, который наследуется от DbContext и предоставляет свойства DbSet <TEntity>.
В Program.cs добавьте определение контекста.
public partial class CricketGroundContext : DbContext { public DbSet<CricketGround> CricketGrounds { get; set; } }
Шаг 8 — Добавьте следующий код в функцию Main, которая добавит два новых объекта CricketGround в контекст.
class Program { static void Main(string[] args) { using (var context = new CricketGroundContext()) { context.CricketGrounds.Add(new CricketGround() { Name = "Shalimar Cricket Ground", Location = DbGeography.FromText("POINT(-122.336106 47.605049)"), }); context.CricketGrounds.Add(new CricketGround() { Name = "Marghazar Stadium", Location = DbGeography .FromText("POINT(-122.335197 47.646711)"), }); context.SaveChanges(); var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)"); var cricketGround = (from cg in context.CricketGrounds orderby cg.Location.Distance(myLocation) select cg).FirstOrDefault(); Console.WriteLine("The closest Cricket Ground to you is: {0}.", cricketGround.Name); } } }
Пространственные свойства инициализируются с использованием метода DbGeography.FromText. Географическая точка, представленная как WellKnownText, передается методу, а затем сохраняет данные. После этого объект CricketGround будет извлечен там, где его местоположение находится ближе всего к указанному местоположению.
Когда приведенный выше код будет выполнен, вы получите следующий вывод:
The closest Cricket Ground to you is: Marghazar Stadium
Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.