Пространственный — дизайнер EF

Замечание

Только начиная с EF5 — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 5. Если вы используете более раннюю версию, некоторые или все сведения не применяются.

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

В этом пошаговом руководстве будет использоваться подход Model First для создания новой базы данных, но конструктор EF также можно использовать с рабочим процессом Database First для сопоставления с существующей базой данных.

Поддержка пространственных типов появилась в Entity Framework 5. Обратите внимание, что для использования новых функций, таких как пространственный тип, перечисления и табличное значение функций, необходимо использовать платформу .NET Framework 4.5. Visual Studio 2012 предназначен для .NET 4.5 по умолчанию.

Чтобы использовать типы пространственных данных, необходимо также использовать поставщик Entity Framework с пространственной поддержкой. Смотрите поддержку поставщика пространственных типов для получения дополнительной информации.

Существует два основных типа пространственных данных: география и геометрия. Тип данных geography хранит эллипсоидальные данные (например, координаты широты и долготы GPS). Тип данных геометрии представляет систему координат Euclidean (плоскую).

Посмотрите видео

В этом видео показано, как сопоставить пространственные типы с конструктором Entity Framework. В нем также показано, как использовать запрос LINQ для поиска расстояния между двумя расположениями.

Представлено: Джулия Корнич

Видео: WMVMP4 | WMV | (ZIP)

Необходимые условия

Для выполнения этого пошагового руководства вам потребуется установить Visual Studio 2012, Ultimate, Premium, Professional или Web Express.

Настройка проекта

  1. Откройте Visual Studio 2012
  2. В меню "Файл" наведите указатель мыши на "Создать", а затем щелкните "Проект"
  3. В левой области щелкните Visual C#, а затем выберите шаблон консоли
  4. Введите SpatialEFDesigner в качестве имени проекта и нажмите кнопку ОК

Создание новой модели с помощью конструктора EF

  1. Щелкните правой кнопкой мыши имя проекта в обозревателе решений, выберите пункт "Добавить" и выберите пункт "Создать элемент"
  2. Выберите данные из меню слева и выберите ADO.NET модель данных сущности в области "Шаблоны"
  3. Введите UniversityModel.edmx для имени файла и нажмите кнопку "Добавить".
  4. На странице мастера модели данных сущности выберите пустую модель в диалоговом окне "Выбор содержимого модели"
  5. Нажмите кнопку Готово.

Отображается конструктор сущностей, предоставляющий графический интерфейс для редактирования модели.

Мастер выполняет следующие действия:

  • Создает файл EnumTestModel.edmx, определяющий концептуальную модель, модель хранения и сопоставление между ними. Задает свойство обработки метаданных edmx-файла для внедрения в выходную сборку, чтобы созданные файлы метаданных были внедрены в сборку.
  • Добавляет ссылку на следующие сборки: EntityFramework, System.ComponentModel.DataAnnotations и System.Data.Entity.
  • Создает файлы UniversityModel.tt и UniversityModel.Context.tt и добавляет их в edmx-файл. Эти файлы шаблонов T4 создают код, который определяет производный тип DbContext и типы POCO, сопоставляемые с сущностями в модели .edmx.

Добавление нового типа сущности

  1. Щелкните правой кнопкой мыши пустую область области конструктора, выберите "Добавить сущность>", откроется диалоговое окно "Создать сущность"
  2. Укажите University в качестве имени типа и UniversityID в качестве имени ключевого свойства, оставьте тип Int32.
  3. Нажмите кнопку ОК.
  4. Щелкните правой кнопкой мыши сущность и выберите "Добавить новое "> Скалярное свойство"
  5. Переименование нового свойства в Name
  6. Добавьте другое скалярное свойство и переименуйте его в location Open the окно свойств и измените тип нового свойства на Geography
  7. Сохранение модели и сборка проекта

    Замечание

    При сборке в списке ошибок могут появиться предупреждения о несопоставленных сущностях и связях. Эти предупреждения можно игнорировать, так как после того, как мы решили создать базу данных из модели, ошибки будут удалены.

Создание базы данных из модели

Теперь мы можем создать базу данных, основанную на модели.

  1. Щелкните правой кнопкой мыши пустое пространство в области конструктора сущностей и выберите "Создать базу данных из модели"
  2. В диалоговом окне "Выбор подключения к данным" мастера создания базы данных отображается. Нажмите кнопку Новое подключение. Укажите (localdb)\mssqllocaldb в качестве имени сервера и University для базы данных, затем нажмите OK.
  3. Откроется диалоговое окно с запросом на создание новой базы данных, нажмите кнопку "Да".
  4. Нажмите "Далее", и мастер создания базы данных генерирует язык определения данных (DDL) для создания базы данных. Сгенерированный DDL отображается в диалоговом окне "Сводка и параметры". Обратите внимание, что DDL не содержит определения таблицы, сопоставленной с перечислимым типом.
  5. Щелкните "Готово". Нажатие кнопки "Готово" не выполняет скрипт DDL.
  6. Мастер создания базы данных выполняет следующее. Открывает UniversityModel.edmx.sql в редакторе T-SQL создает разделы схемы хранилища и сопоставления файла EDMX Добавляет сведения о строке подключения в файл App.config
  7. Нажмите правую кнопку мыши в редакторе T-SQL и откроется диалоговое окно "Выполнить подключение к серверу", введите сведения о подключении на шаге 2 и нажмите кнопку "Подключиться".
  8. Чтобы просмотреть созданную схему, щелкните правой кнопкой мыши имя базы данных в обозревателе объектов SQL Server и выберите "Обновить"

Сохранение и извлечение данных

Откройте файл Program.cs, в котором определен метод Main. Добавьте следующий код в функцию Main.

Код добавляет в контекст два новых объекта Университета. Пространственные свойства инициализированы с помощью метода DbGeography.FromText. Географическая точка, представленная как WellKnownText, передается методу. Затем код сохраняет данные. Затем запрос LINQ, возвращающий объект Университета, где его расположение ближе всего к указанному расположению, создается и выполняется.

using (var context = new UniversityModelContainer())
{
    context.Universities.Add(new University()
    {
        Name = "Graphic Design Institute",
        Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
    });

    context.Universities.Add(new University()
    {
        Name = "School of Fine Art",
        Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),
    });

    context.SaveChanges();

    var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");

    var university = (from u in context.Universities
                                orderby u.Location.Distance(myLocation)
                                select u).FirstOrDefault();

    Console.WriteLine(
        "The closest University to you is: {0}.",
        university.Name);
}

Скомпилируйте и запустите приложение. Программа выдает следующие результаты.

The closest University to you is: School of Fine Art.

Чтобы просмотреть данные в базе данных, щелкните правой кнопкой мыши имя базы данных в обозревателе объектов SQL Server и выберите "Обновить". Затем нажмите правую кнопку мыши в таблице и выберите "Просмотреть данные".

Сводка

В этом пошаговом руководстве мы рассмотрели, как сопоставить пространственные типы с помощью конструктора Entity Framework и как использовать пространственные типы в коде.