Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Только начиная с EF5 — функции, 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 для обновления схемы базы данных. Пример использования миграций см. в разделе Code First в новой базе данных.
Чтобы просмотреть базу данных и данные, сделайте следующее:
- В главном меню Visual Studio 2012 выберите View ->SQL Server Object Explorer.
- Если LocalDB не находится в списке серверов, нажмите правую кнопку мыши на SQL Server и выберите "Добавить SQL Server " Использовать проверку подлинности Windows по умолчанию для подключения к экземпляру LocalDB.
- Разверните узел LocalDB
- Разверните папку "Базы данных", чтобы просмотреть новую базу данных и перейти к таблице "Университеты"
- Чтобы просмотреть данные, щелкните таблицу правой кнопкой мыши и выберите "Просмотреть данные"
Сводка
В этом пошаговом руководстве мы рассмотрели, как использовать пространственные типы с entity Framework Code First.