Spatial — Code First
Uwaga
Tylko platforma EF5 — funkcje, interfejsy API itp. omówione na tej stronie zostały wprowadzone w programie Entity Framework 5. Jeśli korzystasz ze starszej wersji, niektóre lub wszystkie podane informacje nie mają zastosowania.
W filmie wideo i przewodniku krok po kroku pokazano, jak mapować typy przestrzenne przy użyciu funkcji Entity Framework Code First. Pokazano również, jak za pomocą zapytania LINQ znaleźć odległość między dwiema lokalizacjami.
Ten przewodnik będzie używać funkcji Code First do utworzenia nowej bazy danych, ale możesz również użyć funkcji Code First do istniejącej bazy danych.
Obsługa typów przestrzennych została wprowadzona w programie Entity Framework 5. Należy pamiętać, że aby używać nowych funkcji, takich jak typ przestrzenny, wyliczenia i funkcje z wartościami tabel, należy użyć platformy .NET Framework 4.5. Program Visual Studio 2012 domyślnie jest przeznaczony dla platformy .NET 4.5.
Aby korzystać z typów danych przestrzennych, należy również użyć dostawcy programu Entity Framework, który ma obsługę przestrzenną. Aby uzyskać więcej informacji, zobacz obsługa dostawców dla typów przestrzennych.
Istnieją dwa główne typy danych przestrzennych: geografia i geometria. Typ danych geografii przechowuje wielokropek danych (na przykład współrzędne szerokości geograficznej i długości geograficznej GPS). Typ danych geometrycznych reprezentuje układ współrzędnych Euklidesan (płaski).
Obejrzyj film
W tym filmie wideo pokazano, jak mapować typy przestrzenne za pomocą programu Entity Framework Code First. Pokazano również, jak za pomocą zapytania LINQ znaleźć odległość między dwiema lokalizacjami.
Prezentowane przez: Julia Kornich
Wymagania wstępne
Aby ukończyć ten przewodnik, musisz mieć zainstalowany program Visual Studio 2012, Ultimate, Premium, Professional lub Web Express.
Konfigurowanie projektu
- Otwórz program Visual Studio 2012
- W menu Plik wskaż polecenie Nowy, a następnie kliknij pozycję Projekt
- W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Konsola
- Wprowadź spatialCodeFirst jako nazwę projektu i kliknij przycisk OK
Definiowanie nowego modelu przy użyciu funkcji Code First
W przypadku korzystania z programowania Code First zwykle zaczynasz od pisania klas programu .NET Framework, które definiują model koncepcyjny (domena). Poniższy kod definiuje klasę Uniwersytet.
Uniwersytet ma właściwość Location typu DbGeography. Aby użyć typu DbGeography, należy dodać odwołanie do zestawu System.Data.Entity, a także dodać instrukcję System.Data.Spatial using.
Otwórz plik Program.cs i wklej następujące instrukcje using w górnej części pliku:
using System.Data.Spatial;
Dodaj następującą definicję klasy University do pliku Program.cs.
public class University
{
public int UniversityID { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
}
Definiowanie typu pochodnego DbContext
Oprócz definiowania jednostek należy zdefiniować klasę pochodzącą z elementu DbContext i uwidaczniać właściwości TEntity> zestawu dbSet<. Właściwości DbSet<TEntity> poinformują kontekst o typach, które mają zostać uwzględnione w modelu.
Wystąpienie typu pochodnego DbContext zarządza obiektami jednostki w czasie wykonywania, co obejmuje wypełnianie obiektów danymi z bazy danych, śledzenie zmian i utrwalanie danych do bazy danych.
Typy DbContext i DbSet są definiowane w zestawie EntityFramework. Dodamy odwołanie do tej biblioteki DLL przy użyciu pakietu NuGet EntityFramework.
- W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu.
- Wybierz pozycję Zarządzaj pakietami NuGet...
- W oknie dialogowym Zarządzanie pakietami NuGet wybierz kartę Online i wybierz pakiet EntityFramework.
- Kliknij pozycję Zainstaluj
Należy pamiętać, że oprócz zestawu EntityFramework dodano również odwołanie do zestawu System.ComponentModel.DataAnnotations.
W górnej części pliku Program.cs dodaj następującą instrukcję using:
using System.Data.Entity;
W pliku Program.cs dodaj definicję kontekstu.
public partial class UniversityContext : DbContext
{
public DbSet<University> Universities { get; set; }
}
Utrwalanie i pobieranie danych
Otwórz plik Program.cs, w którym zdefiniowano metodę Main. Dodaj następujący kod do funkcji Main.
Kod dodaje dwa nowe obiekty Uniwersytetu do kontekstu. Właściwości przestrzenne są inicjowane przy użyciu metody DbGeography.FromText. Punkt geografii reprezentowany jako WellKnownText jest przekazywany do metody . Następnie kod zapisuje dane. Następnie zapytanie LINQ zwracające obiekt Uniwersytetu, w którym jego lokalizacja znajduje się najbliżej określonej lokalizacji, jest konstruowana i wykonywana.
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);
}
Skompiluj i uruchom aplikację. Program generuje następujące dane wyjściowe:
The closest University to you is: School of Fine Art.
Wyświetlanie wygenerowanej bazy danych
Po pierwszym uruchomieniu aplikacji program Entity Framework utworzy bazę danych. Ponieważ mamy zainstalowany program Visual Studio 2012, baza danych zostanie utworzona w wystąpieniu bazy danych LocalDB. Domyślnie platforma Entity Framework nazywa bazę danych po w pełni kwalifikowanej nazwie kontekstu pochodnego (w tym przykładzie jest to SpatialCodeFirst.UniversityContext). W kolejnych przypadkach będzie używana istniejąca baza danych.
Należy pamiętać, że jeśli po utworzeniu bazy danych wprowadzisz jakiekolwiek zmiany w modelu, należy użyć Migracje Code First, aby zaktualizować schemat bazy danych. Zobacz Code First to a New Database (Kod pierwszy do nowej bazy danych ), aby zapoznać się z przykładem używania migracji.
Aby wyświetlić bazę danych i dane, wykonaj następujące czynności:
- W menu głównym programu Visual Studio 2012 wybierz pozycję Widok ->SQL Server Eksplorator obiektów.
- Jeśli baza danych LocalDB nie znajduje się na liście serwerów, kliknij prawym przyciskiem myszy w programie SQL Server i wybierz pozycję Dodaj program SQL Server Użyj domyślnego uwierzytelniania systemu Windows, aby nawiązać połączenie z wystąpieniem bazy danych LocalDB
- Rozwiń węzeł LocalDB
- Rozwiń folder Bazy danych, aby wyświetlić nową bazę danych i przejść do tabeli Uniwersytety
- Aby wyświetlić dane, kliknij prawym przyciskiem myszy tabelę i wybierz polecenie Wyświetl dane
Podsumowanie
W tym przewodniku przyjrzeliśmy się sposobom używania typów przestrzennych z programem Entity Framework Code First.