Räumlich: EF-DesignerSpatial - EF Designer

Hinweis

Nur EF5 : die Features, APIs usw., die auf dieser Seite erläutert wurden, wurden in Entity Framework 5 eingeführt.EF5 Onwards Only - The features, APIs, etc. discussed in this page were introduced in Entity Framework 5. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.If you are using an earlier version, some or all of the information does not apply.

Im Video und in der exemplarischen Vorgehensweise wird gezeigt, wie räumliche Typen mit dem Entity Framework Designer zugeordnet werden.The video and step-by-step walkthrough shows how to map spatial types with the Entity Framework Designer. Außerdem wird veranschaulicht, wie eine LINQ-Abfrage verwendet wird, um einen Abstand zwischen zwei Standorten zu ermitteln.It also demonstrates how to use a LINQ query to find a distance between two locations.

In dieser exemplarischen Vorgehensweise wird Model First verwendet, um eine neue Datenbank zu erstellen, aber der EF-Designer kann auch mit dem Database First Workflow verwendet werden, um eine Zuordnung zu einer vorhandenen Datenbank herzustellen.This walkthrough will use Model First to create a new database, but the EF Designer can also be used with the Database First workflow to map to an existing database.

Die Unterstützung räumlicher Typen wurde in Entity Framework 5 eingeführt.Spatial type support was introduced in Entity Framework 5. Beachten Sie, dass Sie für die Verwendung der neuen Funktionen, wie z. b. räumlichem Typ, aufzählen und Tabellenwert Funktionen, auf .NET Framework 4,5 abzielen müssen.Note that to use the new features like spatial type, enums, and Table-valued functions, you must target .NET Framework 4.5. Visual Studio 2012 hat standardmäßig .NET 4,5 als Ziel.Visual Studio 2012 targets .NET 4.5 by default.

Um räumliche Datentypen zu verwenden, müssen Sie auch einen Entity Framework Anbieter verwenden, der über räumliche Unterstützung verfügt.To use spatial data types you must also use an Entity Framework provider that has spatial support. Weitere Informationen finden Sie unter Anbieter Unterstützung für räumliche Typen .See provider support for spatial types for more information.

Es gibt zwei Haupt Datentypen für räumliche Daten: Geography und Geometry.There are two main spatial data types: geography and geometry. Der geography-Datentyp speichert Ellipsen Daten (z. b. GPS-breiten-und Längenkoordinaten).The geography data type stores ellipsoidal data (for example, GPS latitude and longitude coordinates). Der geometry-Datentyp stellt das euklidische (flache) Koordinatensystem dar.The geometry data type represents Euclidean (flat) coordinate system.

Video ansehenWatch the video

In diesem Video wird gezeigt, wie räumliche Typen dem Entity Framework Designer zugeordnet werden.This video shows how to map spatial types with the Entity Framework Designer. Außerdem wird veranschaulicht, wie eine LINQ-Abfrage verwendet wird, um einen Abstand zwischen zwei Standorten zu ermitteln.It also demonstrates how to use a LINQ query to find a distance between two locations.

Präsentiert von: Julia kornichPresented By: Julia Kornich

Video: WMV | MP4 | WMV (zip)Video: WMV | MP4 | WMV (ZIP)

VoraussetzungenPre-Requisites

Sie müssen Visual Studio 2012, Ultimate, Premium, Professional oder Web Express Edition installiert haben, um diese exemplarische Vorgehensweise abzuschließen.You will need to have Visual Studio 2012, Ultimate, Premium, Professional, or Web Express edition installed to complete this walkthrough.

Einrichten des ProjektsSet up the Project

  1. Öffnen Sie Visual Studio 2012Open Visual Studio 2012
  2. Zeigen Sie im Menü Datei auf neu, und klicken Sie dann auf Projekt .On the File menu, point to New, and then click Project
  3. Klicken Sie im linken Bereich auf **Visual C # **, und wählen Sie dann die Konsolen Vorlage aus.In the left pane, click Visual C#, and then select the Console template
  4. Geben Sie spatialefdesigner als Namen für das Projekt ein, und klicken Sie auf OK .Enter SpatialEFDesigner as the name of the project and click OK

Erstellen eines neuen Modells mit dem EF-DesignerCreate a New Model using the EF Designer

  1. Klicken Sie mit der rechten Maustaste auf den Projektnamen Projektmappen-Explorer, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues ElementRight-click the project name in Solution Explorer, point to Add, and then click New Item
  2. Wählen Sie im linken Menü Daten aus, und wählen Sie dann im Bereich Vorlagen die Option ADO.NET Entity Data Model aus.Select Data from the left menu and then select ADO.NET Entity Data Model in the Templates pane
  3. Geben Sie für den Dateinamen " universitymodel. edmx " ein, und klicken Sie auf Hinzufügen .Enter UniversityModel.edmx for the file name, and then click Add
  4. Wählen Sie auf der Seite des Entity Data Model-Assistenten im Dialogfeld Modell Inhalte auswählen die Option leeres Modell aus.On the Entity Data Model Wizard page, select Empty Model in the Choose Model Contents dialog box
  5. Klicken Sie auf Fertig stellen.Click Finish

Die Entity Designer, die eine Entwurfs Oberfläche zum Bearbeiten des Modells bereitstellt, wird angezeigt.The Entity Designer, which provides a design surface for editing your model, is displayed.

Der Assistent führt die folgenden Aktionen aus:The wizard performs the following actions:

  • Generiert die Datei "enumtestmodel. edmx", die das konzeptionelle Modell, das Speichermodell und die Zuordnung zwischen Ihnen definiert.Generates the EnumTestModel.edmx file that defines the conceptual model, the storage model, and the mapping between them. Legt die metadatenartefaktverarbeitungs-Eigenschaft der EDMX-Datei fest, die in die Ausgabeassembly eingebettet werden soll, sodass die generierten Metadatendateien in die Assembly eingebettet werdenSets the Metadata Artifact Processing property of the .edmx file to Embed in Output Assembly so the generated metadata files get embedded into the assembly.
  • Fügt einen Verweis auf die folgenden Assemblys hinzu: EntityFramework, System. ComponentModel. DataAnnotations und System. Data. Entity.Adds a reference to the following assemblies: EntityFramework, System.ComponentModel.DataAnnotations, and System.Data.Entity.
  • Erstellt UniversityModel.TT-und UniversityModel.Context.tt-Dateien und fügt Sie der EDMX-Datei hinzu.Creates UniversityModel.tt and UniversityModel.Context.tt files and adds them under the .edmx file. Diese T4-Vorlagen Dateien generieren den Code, der den von dbcontext abgeleiteten Typ und poco-Typen definiert, die den Entitäten im edmx-Modell zugeordnet werden.These T4 template files generate the code that defines the DbContext derived type and POCO types that map to the entities in the .edmx model

Neuen Entitätstyp hinzufügenAdd a New Entity Type

  1. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfs Oberfläche, und wählen Sie Add- > Entity, das Dialogfeld neue Entität wird angezeigt.Right-click an empty area of the design surface, select Add -> Entity, the New Entity dialog box appears
  2. Geben Sie University als Typnamen an, und geben Sie für den Schlüssel Eigenschaftsnamen die Angabe " universityid " an.Specify University for the type name and specify UniversityID for the key property name, leave the type as Int32
  3. Klicken Sie auf OKClick OK
  4. Klicken Sie mit der rechten Maustaste auf die Entität, und wählen Sie Add New- > ScalarRight-click the entity and select Add New -> Scalar Property
  5. Benennen Sie die neue Eigenschaft in Name um.Rename the new property to Name
  6. Fügen Sie eine weitere skalare Eigenschaft hinzu, und benennen Sie Sie in Location um. Öffnen Sie die Eigenschaftenfenster, und ändern Sie den Typ der neuen Eigenschaft in geographyAdd another scalar property and rename it to Location Open the Properties window and change the type of the new property to Geography
  7. Speichern Sie das Modell, und erstellen Sie das Projekt.Save the model and build the project

    Hinweis

    Wenn Sie erstellen, werden möglicherweise Warnungen zu nicht zugeordneten Entitäten und Zuordnungen in der Fehlerliste angezeigt.When you build, warnings about unmapped entities and associations may appear in the Error List. Sie können diese Warnungen ignorieren, da die Fehler nach dem Generieren der Datenbank aus dem Modell entfernt werden.You can ignore these warnings because after we choose to generate the database from the model, the errors will go away.

Datenbank aus Modell generierenGenerate Database from Model

Nun können wir eine Datenbank generieren, die auf dem Modell basiert.Now we can generate a database that is based on the model.

  1. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich auf der Entity Designer Oberfläche, und wählen Sie Datenbank aus Modell generieren .Right-click an empty space on the Entity Designer surface and select Generate Database from Model
  2. Das Dialog Feld Wählen Sie Ihre Datenverbindung aus des Assistenten zum Generieren von Datenbanken wird angezeigt. Klicken Sie auf die Schaltfläche neue Verbindung , und Geben Sie (localdb) \ mssqllocaldb für den Servernamen und die University für die Datenbank an.The Choose Your Data Connection Dialog Box of the Generate Database Wizard is displayed Click the New Connection button Specify (localdb)\mssqllocaldb for the server name and University for the database and click OK
  3. Wenn Sie in einem Dialogfeld gefragt werden, ob Sie eine neue Datenbank erstellen möchten, klicken Sie auf Ja.A dialog asking if you want to create a new database will pop up, click Yes.
  4. Klicken Sie auf weiter , und der Assistent zum Erstellen einer Datenbank generiert die Datendefinitionssprache (DDL) zum Erstellen einer Datenbank. die generierte DDL wird im Dialog Feld Zusammenfassung und Einstellungen angezeigt. Hinweis: die DDL enthält keine Definition für eine Tabelle, die dem Enumerationstyp zugeordnet ist.Click Next and the Create Database Wizard generates data definition language (DDL) for creating a database The generated DDL is displayed in the Summary and Settings Dialog Box Note, that the DDL does not contain a definition for a table that maps to the enumeration type
  5. Klicken Sie auf Fertig stellen klicken Sie das DDL-Skript nicht aus.Click Finish Clicking Finish does not execute the DDL script.
  6. Der Assistent zum Erstellen einer Datenbank führt Folgendes aus: öffnet die Datei " universitymodel. edmx. SQL " im T-SQL-Editor App.config, generiert die Abschnitte "Store Schema" und "Mapping" der EDMX-Datei.The Create Database Wizard does the following: Opens the UniversityModel.edmx.sql in T-SQL Editor Generates the store schema and mapping sections of the EDMX file Adds connection string information to the App.config file
  7. Klicken Sie im T-SQL-Editor auf die Rechte Maustaste, und wählen Sie das Dialogfeld Verbindung mit Server herstellen aus, und Geben Sie die Connect Verbindungsinformationen aus Schritt 2 ein.Click the right mouse button in T-SQL Editor and select Execute The Connect to Server dialog appears, enter the connection information from step 2 and click Connect
  8. Um das generierte Schema anzuzeigen, klicken Sie in SQL Server-Objekt-Explorer mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisieren .To view the generated schema, right-click on the database name in SQL Server Object Explorer and select Refresh

Persistenz und Abrufen von DatenPersist and Retrieve Data

Öffnen Sie die Datei Program.cs, in der die Main-Methode definiert ist.Open the Program.cs file where the Main method is defined. Fügen Sie der Main-Funktion den folgenden Code hinzu.Add the following code into the Main function.

Der Code fügt dem Kontext zwei neue University-Objekte hinzu.The code adds two new University objects to the context. Räumliche Eigenschaften werden mithilfe der Methode "dbgeography. fromtext" initialisiert.Spatial properties are initialized by using the DbGeography.FromText method. Der als wellknowntext dargestellte geografiepunkt wird an die-Methode übermittelt.The geography point represented as WellKnownText is passed to the method. Der Code speichert die Daten dann.The code then saves the data. Anschließend wird die LINQ-Abfrage, die ein University-Objekt zurückgibt, dessen Standort dem angegebenen Speicherort am nächsten liegt, erstellt und ausgeführt.Then, the LINQ query that that returns a University object where its location is closest to the specified location, is constructed and executed.

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.Compile and run the application. Das Programm erzeugt die folgende Ausgabe:The program produces the following output:

The closest University to you is: School of Fine Art.

Zum Anzeigen von Daten in der Datenbank klicken Sie in SQL Server-Objekt-Explorer mit der rechten Maustaste auf den Datenbanknamen, und wählen Sie Aktualisierenaus.To view data in the database, right-click on the database name in SQL Server Object Explorer and select Refresh. Klicken Sie dann auf die Rechte Maustaste in der Tabelle, und wählen Sie Daten anzeigenaus.Then, click the right mouse button on the table and select View Data.

ZusammenfassungSummary

In dieser exemplarischen Vorgehensweise wurde erläutert, wie räumliche Typen mithilfe der Entity Framework Designer zugeordnet werden und wie räumliche Typen im Code verwendet werden.In this walkthrough we looked at how to map spatial types using the Entity Framework Designer and how to use spatial types in code.