Пространственный Code First

Примечание

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

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

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

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

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

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

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

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

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

Видео: WMVMP4WMV (ZIP)

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

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

Настройка Project

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

Определение новой модели с помощью Code First

при использовании Code First разработки обычно начинается написание платформа .NET Framework классов, определяющих концептуальную (доменную) модель. В приведенном ниже коде определяется класс университет.

Университет имеет свойство Location типа заданное DbGeography. Чтобы использовать тип заданное DbGeography, необходимо добавить ссылку на сборку System. Data. Entity, а также добавить инструкцию System. Data. пространственный using.

Откройте файл Program. cs и вставьте в начало файла следующие инструкции using:

using System.Data.Spatial;

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

public class University  
{
    public int UniversityID { get; set; }
    public string Name { get; set; }
    public DbGeography Location { get; set; }
}

Определение производного типа DbContext

В дополнение к определению сущностей необходимо определить класс, производный от DbContext и предоставляющий свойства DbSet<TEntity>. Свойства DbSet<TEntity> позволяют контексту определить, какие типы необходимо включить в модель.

Экземпляр производного типа DbContext управляет объектами сущностей во время выполнения, в частности заполняет объекты данными из базы данных, отслеживает изменения и сохраняет данные в базе данных.

Типы DbContext и DbSet определены в сборке EntityFramework. мы добавим ссылку на эту библиотеку DLL с помощью пакета NuGet EntityFramework.

  1. В обозреватель решений щелкните правой кнопкой мыши имя проекта.
  2. выберите управление пакетами NuGet...
  3. в диалоговом окне управление пакетами NuGet выберите вкладку в интернете и выберите пакет EntityFramework .
  4. Щелкните Установить.

Обратите внимание, что в дополнение к сборке EntityFramework также добавляется ссылка на сборку System. ComponentModel..

В верхней части файла Program. cs добавьте следующую инструкцию using:

using System.Data.Entity;

В программе. cs добавьте определение контекста. 

public partial class UniversityContext : DbContext
{
    public DbSet<University> Universities { get; set; }
}

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

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

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

using (var context = new UniversityContext ())
{
    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.

Просмотр созданной базы данных

При первом запуске приложения Entity Framework создает базу данных. поскольку на компьютере установлено Visual Studio 2012, база данных будет создана на экземпляре LocalDB. По умолчанию Entity Framework присваивает базе данных имя, соответствующее полному имени производного контекста (в данном примере это спатиалкодефирст. университиконтекст). В последующих случаях будет использоваться существующая база данных.  

обратите внимание, что при внесении изменений в модель после создания базы данных следует использовать Code First Migrations для обновления схемы базы данных. пример использования миграций см. в разделе Code First к новой базе данных .

Чтобы просмотреть базу данных и данные, выполните следующие действия.

  1. в главном меню Visual Studio 2012 выберите видSQL Server обозреватель объектов.
  2. если LocalDB нет в списке серверов, щелкните правой кнопкой мыши на SQL Server и выберите добавить SQL Server использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB
  3. разверните узел LocalDB
  4. Unfold папку databases , чтобы увидеть новую базу данных, и перейдите к таблице университетов .
  5. Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите Просмотр данных .

Итоги

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