Пространственный — конструктор EF

Примечание

Ef5 Onwards Only — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 5. При использовании более ранней версии могут быть неприменимы некоторые или все сведения.

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

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

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

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

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

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

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

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

Видео: WMV | MP4 | 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. Укажите имя типа Университета и укажите идентификатор UniversityID для имени свойства ключа, оставьте тип Int32
  3. Нажмите кнопку ОК.
  4. Щелкните сущность правой кнопкой мыши и выберите " Добавить новое " Скалярное> свойство"
  5. Переименование нового свойства в Name
  6. Добавьте еще одно скалярное свойство и переименуйте его в Location Open окно свойств и измените тип нового свойства на Geography.
  7. Сохранение модели и сборка проекта

    Примечание

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

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

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

  1. Щелкните правой кнопкой мыши пустое пространство в области конструктора сущностей и выберите "Создать базу данных из модели"
  2. В диалоговом окне "Выбор подключения к данным" мастера создания базы данных отображается кнопка "Указать новое подключение"\mssqllocaldb для имени сервера и университета для базы данных и нажмите кнопку "ОК".
  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.

Этот код добавляет два новых объекта University в контекст. Пространственные свойства инициализируются с помощью метода 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 и как использовать пространственные типы в коде.