Пространственный — код в первую очередь
Примечание.
Ef5 Onwards Only — функции, API и т. д., рассмотренные на этой странице, были представлены в Entity Framework 5. При использовании более ранней версии могут быть неприменимы некоторые или все сведения.
В пошаговом руководстве по видео показано, как сопоставить пространственные типы с Entity Framework Code First. В нем также показано, как использовать запрос LINQ для поиска расстояния между двумя расположениями.
В этом пошаговом руководстве будет использоваться code First для создания новой базы данных, но вы также можете использовать Code First для существующей базы данных.
Поддержка пространственных типов появилась в Entity Framework 5. Обратите внимание, что для использования новых функций, таких как пространственный тип, перечисления и табличное значение функций, необходимо использовать платформа .NET Framework 4.5. Visual Studio 2012 предназначен для .NET 4.5 по умолчанию.
Чтобы использовать типы пространственных данных, необходимо также использовать поставщик Entity Framework с пространственной поддержкой. Дополнительные сведения см . в поддержке поставщика пространственных типов .
Существует два основных типа пространственных данных: география и геометрия. Тип данных geography хранит многоточие (например, координаты широты GPS и долготы). Тип данных геометрии представляет систему координат Euclidean (плоскую).
Просмотреть видео
В этом видео показано, как сопоставить пространственные типы с Entity Framework Code First. В нем также показано, как использовать запрос LINQ для поиска расстояния между двумя расположениями.
Представлено: Джулия Корнич
Предварительные требования
Для выполнения этого пошагового руководства вам потребуется установить Visual Studio 2012, Ultimate, Premium, Professional или Web Express.
Настройка проекта
- Открытие Visual Studio 2012
- В меню "Файл" наведите указатель мыши на "Создать", а затем щелкните "Проект"
- В левой области щелкните Visual C#, а затем выберите шаблон консоли
- Введите SpatialCodeFirst в качестве имени проекта и нажмите кнопку ОК
Определение новой модели с помощью кода в первую очередь
При использовании разработки Code First вы обычно начинаете с написания платформа .NET Framework классов, определяющих концептуальную модель (домен). Приведенный ниже код определяет класс Университета.
Университет имеет свойство Location типа DbGeography. Чтобы использовать тип DbGeography, необходимо добавить ссылку на сборку System.Data.Entity, а также добавить инструкцию System.Data.Spatial 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.
- В Обозреватель решений щелкните правой кнопкой мыши имя проекта.
- Выберите " Управление пакетами NuGet...
- В диалоговом окне "Управление пакетами NuGet" выберите вкладку "Интернет " и выберите пакет EntityFramework .
- Щелкните Установить.
Обратите внимание, что помимо сборки EntityFramework также добавляется ссылка на сборку System.ComponentModel.DataAnnotations.
В верхней части файла Program.cs добавьте следующую инструкцию using:
using System.Data.Entity;
В файле Program.cs добавьте определение контекста.
public partial class UniversityContext : DbContext
{
public DbSet<University> Universities { get; set; }
}
Сохранение и извлечение данных
Откройте файл Program.cs, в котором определен метод Main. Добавьте следующий код в функцию Main.
Код добавляет в контекст два новых объекта Университета. Пространственные свойства инициализированы с помощью метода DbGeography.FromText. География, представленная как WellKnownText, передается методу. Затем код сохраняет данные. Затем запрос 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 присваивает базе данных полное имя производного контекста (в этом примере — SpatialCodeFirst.UniversityContext). В последующий раз будет использоваться существующая база данных.
Обратите внимание, что при внесении изменений в модель после создания базы данных следует использовать code First Migrations для обновления схемы базы данных. Пример использования миграций см . в разделе "Код сначала в новую базу данных ".
Чтобы просмотреть базу данных и данные, сделайте следующее:
- В главном меню Visual Studio 2012 выберите View ->SQL Server обозреватель объектов.
- Если LocalDB не находится в списке серверов, нажмите правую кнопку мыши на SQL Server и выберите "Добавить SQL Server" Использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB.
- Разверните узел LocalDB
- Разверните папку "Базы данных", чтобы просмотреть новую базу данных и перейти к таблице "Университеты"
- Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите "Просмотреть данные"
Итоги
В этом пошаговом руководстве мы рассмотрели, как использовать пространственные типы с entity Framework Code First.