Поделиться через


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

Примечание.

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

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

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

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

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

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

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

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

    Примечание.

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

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

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

  1. Щелкните правой кнопкой мыши пустое пространство в области конструктора сущностей и выберите "Создать базу данных из модели"
  2. В диалоговом окне "Выбор данных Подключение ion" мастера создания базы данных отображается кнопка "Создать Подключение ion" (Укажите (localdb)\mssqllocaldb для имени сервера и университета базы данных и нажмите кнопку "ОК"
  3. Откроется диалоговое окно с запросом на создание новой базы данных, нажмите кнопку "Да".
  4. Нажмите кнопку "Далее" и мастер создания базы данных создает язык определения данных (DDL) для создания базы данных, созданной DDL отображается в диалоговом окне "Сводка" и Параметры примечания, что DDL не содержит определения таблицы, сопоставленной с типом перечисления.
  5. Нажатие кнопки " Готово" не выполняет скрипт DDL.
  6. Мастер создания базы данных выполняет следующие действия: открывается библиотека UniversityModel.edmx.sql в редакторе T-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 и как использовать пространственные типы в коде.