Teilen über


Räumlich – EF Designer

Hinweis

Nur EF5 und höher: – Die Features, APIs usw., die auf dieser Seite erläutert werden, wurden in Entity Framework 5 eingeführt. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.

In diesem Video und dieser exemplarischen Vorgehensweise wird Schritt für Schritt gezeigt, wie räumliche Typen dem Entity Framework-Designer zugeordnet werden können. Außerdem wird veranschaulicht, wie Sie eine LINQ-Abfrage verwenden können, um einen Abstand zwischen zwei Standorten zu bestimmen.

In dieser exemplarischen Vorgehensweise wird Model First verwendet, um eine neue Datenbank zu erstellen, aber der EF-Designer kann auch mit dem Workflow Database First verwendet werden, um ihn einer vorhandenen Datenbank zuzuordnen.

Die Unterstützung für räumliche Typen wurde in Entity Framework 5 eingeführt. Für die Verwendung der neuen Features wie räumliche Datentypen, Enumerationen und Tabellenwertfunktionen muss .NET Framework 4.5 angezielt werden. Visual Studio 2012 zielt standardmäßig NET 4.5 an.

Um räumliche Datentypen zu verwenden, müssen Sie außerdem einen Entity Framework-Anbieter verwenden, der räumliche Unterstützung bietet. Weitere Informationen finden Sie unter Anbieterunterstützung für räumliche Typen.

Es gibt zwei räumliche Hauptdatentypen: Geografie und Geometrie. Der Geografie-Datentyp speichert ellipsenförmige Daten, wie z. B. GPS-Breiten- und Längenkoordinaten. Der Geometrie-Datentyp stellt Daten in einem euklidischen (flachen) Koordinatensystem dar.

Video ansehen

In diesem Video wird gezeigt, wie räumliche Typen mit dem Entity Framework-Designer zugeordnet werden können. Außerdem wird veranschaulicht, wie Sie eine LINQ-Abfrage verwenden können, um einen Abstand zwischen zwei Standorten zu bestimmen.

Präsentiert von: Julia Kornich

Video: WMV | MP4 | WMV (ZIP)

Voraussetzungen

Sie müssen Visual Studio 2012 Ultimate, Premium, Professional oder die Web Express Edition installiert haben, um diese exemplarische Vorgehensweise zu absolvieren.

Einrichten des Projekts

  1. Öffnen Sie Visual Studio 2012
  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt
  3. Klicken Sie im linken Bereich auf Visual C#, und wählen Sie dann die Konsolen-Vorlage aus
  4. Geben Sie SpatialEFDesigner als Namen des Projekts ein, und klicken Sie auf OK

Erstellen eines neuen Modells mithilfe des EF-Designers

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, klicken Sie auf Hinzufügen und anschließend auf Neues Element
  2. Wählen Sie Daten im linken Menü aus, und wählen Sie dann im Bereich „Vorlagen“ ADO.NET Entity Data Model aus
  3. Geben Sie UniversityModel.edmx als Dateinamen ein, und klicken Sie dann auf Hinzufügen
  4. Wählen Sie auf der Seite des Entity Data Model-Assistenten im Dialogfeld „Modellinhalt auswählen“ die Option Leeres Modell aus
  5. Klicken Sie auf Fertig stellen.

Der Entity Designer, der eine Entwurfsoberfläche zum Bearbeiten Ihres Modells bereitstellt, wird angezeigt.

Der Assistent führt die folgenden Aktionen aus:

  • Die Datei EnumTestModel.edmx, die das konzeptionelle Modell, das Speichermodell und die Zuordnungen zwischen beiden Modellen definiert, wird generiert. Setzt die Eigenschaft „Verarbeitung von Metadaten-Artefakten“ der .edmx-Datei auf „In Ausgabebaugruppe einbetten“, damit die generierten Metadaten-Dateien in die Baugruppe eingebettet werden.
  • Fügt einen Verweis auf die folgenden Assemblys hinzu: EntityFramework, System.ComponentModel.DataAnnotations und System.Data.Entity.
  • Erstellt UniversityModel.tt- und UniversityModel.Context.tt-Dateien und fügt sie unter der .edmx-Datei hinzu. Diese T4-Vorlagendateien generieren den Code, der den von DbContext abgeleiteten Typ und POCO-Typen definiert, die den Entitäten im .edmx-Modell zugeordnet sind

Einen neuen Entitätstypen hinzufügen

  1. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche, wählen Sie Hinzufügen ->Entität aus und das Dialogfeld „Neue Entität“ wird angezeigt
  2. Geben Sie University als Typnamen an, und geben Sie UniversityID als Schlüsseleigenschaftsnamen an, belassen Sie den Typ bei Int32
  3. Wählen Sie OK aus.
  4. Klicken Sie mit der rechten Maustaste auf die Entität, und wählen Sie Neu hinzufügen -> Skalareigenschaft aus
  5. Benennen Sie die neue Eigenschaft in Name um
  6. Fügen Sie eine weitere skalare Eigenschaft hinzu, und benennen Sie sie in Location um. Öffnen Sie das Eigenschaftenfenster, und ändern Sie den Typ der neuen Eigenschaft in Geografie
  7. Speichern des Modells und Erstellen des Projekts

    Hinweis

    Beim Erstellen können Warnungen zu nicht zugeordneten Entitäten und Zuordnungen in der Fehlerliste angezeigt werden. Sie können diese Warnungen ignorieren, da nach der Auswahl, die Datenbank aus dem Modell zu generieren, die Fehler nicht mehr auftreten.

Datenbank anhand des Modells generieren

Jetzt können wir eine Datenbank generieren, die auf dem Modell basiert.

  1. Klicken Sie mit der rechten Maustaste an einer leeren Stelle der Entity Designer-Oberfläche, und wählen Sie Datenbank aus Modell generieren aus
  2. Das Dialogfeld „Datenverbindung auswählen“ des Assistenten „Datenbank generieren“ wird angezeigt. Klicken Sie auf die Schaltfläche Neue Verbindung. Geben Sie (localdb)\mssqllocaldb als Servernamen an und University als Datenbank ein, und klicken Sie auf OK
  3. Ein Dialogfeld, in dem Sie gefragt werden, ob eine neue Datenbank erstellt werden soll, klicken Sie auf Ja.
  4. Klicken Sie auf Weiter, und der Assistent zum Erstellen von Datenbanken generiert Datendefinitionssprache (Data Definition Language, DDL) zum Erstellen einer Datenbank. Die generierte DDL wird im Dialogfeld „Zusammenfassung und Einstellungen“ angezeigt. Beachten Sie, dass die DDL keine Definition für eine Tabelle enthält, die dem Enumerationstyp zugeordnet ist
  5. Klicken Sie auf Fertigstellen. Durch das Klicken auf „Fertigstellen“ wird das DDL-Skript nicht ausgeführt.
  6. Der Assistent zum Erstellen von Datenbanken führt folgendes aus: Öffnet die UniversityModel.edmx.sql im T-SQL-Editor. Generiert das Speicherschema und Zuordnungsabschnitte der EDMX-Datei. Fügt der Datei „App.config“ Informationen über die Verbindungszeichenfolgen hinzu
  7. Klicken Sie im T-SQL-Editor auf die rechte Maustaste, und wählen Sie Ausführen aus. Es öffnet sich das Dialogfeld „Verbindung mit dem Server herstellen“. Geben Sie die Verbindungsinformationen aus Schritt 2 ein, und klicken Sie auf Verbinden
  8. Um das generierte Schema anzuzeigen, klicken Sie im Objekt-Explorer des SQL Servers mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisieren aus

Speichern und Abrufen von Daten

Öffnen Sie die Datei „Program.cs“, in der die Main-Methode definiert ist. Fügen Sie der Main-Funktion 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 Geografiepunkt, der als WellKnownText dargestellt wird, wird an die Methode übergeben. Anschließend werden die Daten vom Code gespeichert. Anschließend wird die LINQ-Abfrage, die ein University-Objekt zurückgibt, dort wo seine Position am nächsten an der angegebenen Position ist, konstruiert und ausgeführt.

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

Um Daten in der Datenbank anzuzeigen, klicken Sie im Objekt-Explorer des SQL Servers mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisieren aus. Klicken Sie dann auf die rechte Maustaste auf der Tabelle, und wählen Sie Daten anzeigen aus.

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben wir untersucht, wie räumliche Typen mithilfe des Entity Framework-Designers zugeordnet und räumliche Typen im Code verwendet werden.