Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
NUR AB EF5 – Die auf dieser Seite besprochenen Features, APIs usw. wurden in Entity Framework 5 eingeführt. Wenn Sie eine frühere Version verwenden, gelten einige oder alle Informationen nicht.
In der Video- und schrittweisen Anleitung wird gezeigt, wie räumliche Datentypen mit Entity Framework *Code First* zugeordnet werden. Außerdem wird veranschaulicht, wie sie eine LINQ-Abfrage verwenden, um einen Abstand zwischen zwei Speicherorten zu finden.
In dieser exemplarischen Vorgehensweise wird Code First zum Erstellen einer neuen Datenbank verwendet, Sie können code First aber auch für eine vorhandene Datenbank verwenden.
Die Unterstützung für räumliche Typen wurde in Entity Framework 5 eingeführt. Beachten Sie, dass Sie für die Verwendung der neuen Features wie räumlichen Typ, Enumerationen und Tabellenwertfunktionen .NET Framework 4.5 verwenden müssen. Visual Studio 2012 zielt standardmäßig auf .NET 4.5 ab.
Um räumliche Datentypen zu verwenden, müssen Sie auch einen Entity Framework-Anbieter verwenden, der räumliche Unterstützung hat. Weitere Informationen finden Sie unter Provider-Unterstützung für räumliche Typen.
Es gibt zwei haupträumische Datentypen: Geografie und Geometrie. Der Geografische Datentyp speichert ellipsoidale Daten (z. B. GPS-Breiten- und Längengradkoordinaten). Der Geometriedatentyp stellt euklidean (flaches) Koordinatensystem dar.
Sehen Sie sich das Video an
In diesem Video wird gezeigt, wie Räumliche Typen zuerst mit Entity Framework Code zugeordnet werden. Außerdem wird veranschaulicht, wie sie eine LINQ-Abfrage verwenden, um einen Abstand zwischen zwei Speicherorten zu finden.
Präsentiert von: Julia Kornich
Voraussetzungen
Sie müssen Visual Studio 2012, Ultimate, Premium, Professional oder Web Express Edition installiert haben, um diese exemplarische Vorgehensweise abzuschließen.
Einrichten des Projekts
- Öffnen von Visual Studio 2012
- Zeigen Sie im Menü "Datei " auf "Neu", und klicken Sie dann auf "Projekt".
- Klicken Sie im linken Bereich auf Visual C#, und wählen Sie dann die Konsolenvorlage aus.
- Geben Sie "SpatialCodeFirst" als Namen des Projekts ein, und klicken Sie auf "OK".
Ein neues Modell mithilfe des Code-First-Ansatzes definieren
Beim Verwenden der Code First-Entwicklung beginnen Sie in der Regel mit dem Schreiben von .NET Framework-Klassen, die Ihr konzeptionelles (Domänen)-Modell definieren. Der folgende Code definiert die University-Klasse.
Die Universität verfügt über die Location-Eigenschaft des DbGeography-Typs. Um den DbGeography-Typ zu verwenden, müssen Sie einen Verweis auf die System.Data.Entity-Assembly hinzufügen und auch die System.Data.Spatial using-Anweisung hinzufügen.
Öffnen Sie die Program.cs Datei, und fügen Sie die folgenden using-Anweisungen am Anfang der Datei ein:
using System.Data.Spatial;
Fügen Sie der datei Program.cs die folgende Klassendefinition der University hinzu.
public class University
{
public int UniversityID { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
}
Definieren des abgeleiteten DbContext-Typs
Zusätzlich zum Definieren von Entitäten müssen Sie eine Klasse definieren, die von DbContext abgeleitet wird und DbSet<TEntity-Eigenschaften> verfügbar macht. Die DbSet<TEntity-Eigenschaften> lassen den Kontext wissen, welche Typen in das Modell eingeschlossen werden sollen.
Eine Instanz des vom DbContext abgeleiteten Typs verwaltet die Entitätsobjekte während der Laufzeit, einschließlich auffüllen von Objekten mit Daten aus einer Datenbank, Änderungsnachverfolgung und Beibehalten von Daten in der Datenbank.
Die Typen DbContext und DbSet werden in der EntityFramework-Assembly definiert. Wir fügen mithilfe des EntityFramework NuGet-Pakets einen Verweis auf diese DLL hinzu.
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen.
- Wählen Sie „NuGet-Pakete verwalten…“
- Wählen Sie im Dialogfeld "NuGet-Pakete verwalten" die Registerkarte "Online " und dann das EntityFramework-Paket aus.
- Klicken Sie auf Install (Installieren).
Beachten Sie, dass zusätzlich zur EntityFramework-Assembly auch ein Verweis auf die Assembly "System.ComponentModel.DataAnnotations" hinzugefügt wird.
Fügen Sie oben in der Program.cs-Datei die folgende using-Anweisung hinzu:
using System.Data.Entity;
Fügen Sie in der Program.cs die Kontextdefinition hinzu.
public partial class UniversityContext : DbContext
{
public DbSet<University> Universities { get; set; }
}
Speichern und Abrufen von Daten
Öffnen Sie die Program.cs Datei, in der die Main-Methode definiert ist. Fügen Sie der Hauptfunktion den folgenden Code hinzu.
Der Code fügt dem Kontext zwei neue University-Objekte hinzu. Räumliche Eigenschaften werden mithilfe der DbGeography.FromText-Methode initialisiert. Der geografiene Punkt, der als WellKnownText dargestellt wird, wird an die Methode übergeben. Der Code speichert dann die Daten. Anschließend wird die LINQ-Abfrage konstruiert und ausgeführt, die ein University-Objekt zurückgibt, dessen Standort der angegebenen Position am nächsten liegt.
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);
}
Kompilieren Sie die Anwendung, und führen Sie sie aus. Das Programm erzeugt die folgende Ausgabe:
The closest University to you is: School of Fine Art.
Generierte Datenbank anzeigen
Wenn Sie die Anwendung zum ersten Mal ausführen, erstellt Das Entity Framework eine Datenbank für Sie. Da Visual Studio 2012 installiert ist, wird die Datenbank in der LocalDB-Instanz erstellt. Standardmäßig benennt das Entity Framework die Datenbank nach dem vollqualifizierten Namen des abgeleiteten Kontexts (in diesem Beispiel ist SpatialCodeFirst.UniversityContext). Die nachfolgenden Zeiten, in denen die vorhandene Datenbank verwendet wird.
Wenn Sie Änderungen am Modell vornehmen, nachdem die Datenbank erstellt wurde, sollten Sie code First Migrationen verwenden, um das Datenbankschema zu aktualisieren. Ein Beispiel für die Verwendung von Migrationen finden Sie unter Code First to a New Database .
Gehen Sie wie folgt vor, um die Datenbank und Die Daten anzuzeigen:
- Wählen Sie im Hauptmenü von Visual Studio 2012 die Option Ansicht ->SQL Server-Objekt-Explorer aus.
- Wenn LocalDB nicht in der Liste der Server enthalten ist, klicken Sie mit der rechten Maustaste auf SQL Server, und wählen Sie "SQL Server hinzufügen" aus. Verwenden Sie die standardmäßige Windows-Authentifizierung, um eine Verbindung mit der LocalDB-Instanz herzustellen.
- Erweitern des LocalDB-Knotens
- Entfalten Sie den Ordner "Datenbanken ", um die neue Datenbank anzuzeigen und zur Tabelle " Universitäten " zu navigieren.
- Zum Anzeigen von Daten klicken Sie mit der rechten Maustaste auf die Tabelle, und wählen Sie "Daten anzeigen" aus.
Zusammenfassung
In dieser exemplarischen Vorgehensweise haben wir untersucht, wie raumbezogene Typen mit Entity Framework "Code First" verwendet werden.