Конструктор пространственного-EF

Примечание

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

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

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

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

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

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

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

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

Представлено: Julia Корнич

Видео: WMVMP4WMV (ZIP)

Предварительные требования

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

Настройка Project

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

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

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

Отобразится Entity Designer, предоставляющий область конструктора для редактирования модели.

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

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

Добавить новый тип сущности

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

    Примечание

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

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

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

  1. Щелкните правой кнопкой мыши пустое пространство на поверхности Entity Designer и выберите пункт создать базу данных из модели .
  2. Откроется диалоговое окно Выбор подключения к данным мастера создания базы данных. Нажмите кнопку создать подключение , укажите (LocalDB) \mssqllocaldb в поле имя сервера и университет для базы данных и нажмите кнопку ОК .
  3. Появится диалоговое окно с вопросом о том, нужно ли создать новую базу данных, и нажать кнопку Да.
  4. нажмите кнопку далее , и мастер создания базы данных создаст язык описания данных (ddl) для создания базы данных. в диалоговом окне сводка и Параметры отображается созданная ddl-инструкция. в этом случае ddl не содержит определения для таблицы, сопоставленной с типом перечисления.
  5. Нажмите кнопку Готово , чтобы не выполнять скрипт DDL.
  6. мастер создания базы данных выполняет следующие действия: открывает файл университимодел. edmx. sql в редакторе T-SQL создает схему хранилища и разделы сопоставления в файле edmx добавляет сведения строки подключения в App.config
  7. щелкните правой кнопкой мыши в редакторе T-SQL и выберите пункт выполнить диалоговое окно Подключение к серверу, введите сведения о подключении на шаге 2 и нажмите кнопку Подключение
  8. чтобы просмотреть созданную схему, щелкните правой кнопкой мыши имя базы данных в SQL Server обозревателе объектов и выберите команду обновить .

Сохранение и получение данных

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

Код добавляет в контекст два новых объекта университета. Пространственные свойства инициализируются с помощью метода заданное DbGeography. FromText. Географическая точка, представленная как Веллкновнтекст, передается в метод. Затем код сохраняет данные. Затем выполняется построение и выполнение запроса 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 Designer и как использовать пространственные типы в коде.