Dela via


Spatial – Kod först

Anmärkning

ENDAST EF5 – De funktioner, API:er osv. som beskrivs på den här sidan introducerades i Entity Framework 5. Om du använder en tidigare version gäller inte en del av eller all information.

Videon och den stegvisa genomgången visar hur du mappar rumsliga typer med Entity Framework Code First. Den visar också hur du använder en LINQ-fråga för att hitta ett avstånd mellan två platser.

Den här genomgången använder Code First för att skapa en ny databas, men du kan också använda Code First till en befintlig databas.

Stöd för rumslig typ introducerades i Entity Framework 5. Observera att om du vill använda nya funktioner som rumslig typ, uppräkningar och tabellvärdesfunktioner måste du rikta in dig på .NET Framework 4.5. Visual Studio 2012 riktar in sig på .NET 4.5 som standard.

Om du vill använda rumsliga datatyper måste du också använda en Entity Framework-provider som har rumsligt stöd. Mer information finns i providerstöd för rumsliga typer .

Det finns två huvudsakliga rumsliga datatyper: geografi och geometri. Datatypen geografi lagrar ellipsoiddata (till exempel GPS-latitud och longitudkoordinater). Datatypen geometri representerar euklidiskt (platt) koordinatsystem.

Titta på videon

Den här videon visar hur du mappar rumsliga typer med Entity Framework Code First. Den visar också hur du använder en LINQ-fråga för att hitta ett avstånd mellan två platser.

Presenterad av: Julia Kornich

Video: WMV | MP4 | WMV (ZIP)

Förutsättningar

Du måste ha Visual Studio 2012, Ultimate, Premium, Professional eller Web Express edition installerat för att slutföra den här genomgången.

Konfigurera projektet

  1. Öppna Visual Studio 2012
  2. Peka på NyttArkiv-menyn och klicka sedan på Projekt
  3. Klicka på Visual C# i den vänstra rutan och välj sedan konsolmallen
  4. Ange SpatialCodeFirst som namnet på projektet och klicka på OK

Definiera en ny modell med kod först

När du använder Code First-utveckling börjar du vanligtvis med att skriva .NET Framework-klasser som definierar din konceptuella modell (domän). Koden nedan definierar klassen University.

Universitetet har egenskapen Location för DbGeography-typen. Om du vill använda DbGeography-typen måste du inkludera en referens till assembly:n System.Data.Entity och även inkludera using-instruktionen System.Data.Spatial.

Öppna filen Program.cs och klistra in följande using-anvisningar längst upp i filen.

using System.Data.Spatial;

Lägg till följande klassdefinition för universitetet i filen Program.cs.

public class University  
{
    public int UniversityID { get; set; }
    public string Name { get; set; }
    public DbGeography Location { get; set; }
}

Definiera DbContext-deriverad typ

Förutom att definiera entiteter måste du definiera en klass som härleds från DbContext och exponerar DbSet<TEntity-egenskaper> . Egenskaperna DbSet<TEntity> meddelar kontexten vilka typer du vill ta med i modellen.

En instans av den härledda typen DbContext hanterar entitetsobjekten under körningen, vilket omfattar att fylla i objekt med data från en databas, ändra spårning och spara data i databasen.

Typerna DbContext och DbSet definieras i EntityFramework-sammansättningen. Vi lägger till en referens till denna DLL med hjälp av EntityFramework NuGet-paketet.

  1. Högerklicka på projektnamnet i Solution Explorer.
  2. Välj Hantera NuGet-paket...
  3. I dialogrutan Hantera NuGet-paket väljer du fliken Online och väljer EntityFramework-paketet .
  4. Klicka på Installera

Observera att förutom EntityFramework-sammansättningen läggs även en referens till sammansättningen System.ComponentModel.DataAnnotations.

Överst i filen Program.cs lägger du till följande using-sats:

using System.Data.Entity;

Lägg till kontextdefinitionen i Program.cs. 

public partial class UniversityContext : DbContext
{
    public DbSet<University> Universities { get; set; }
}

Spara och hämta data

Öppna filen Program.cs där Main-metoden har definierats. Lägg till följande kod i funktionen Main.

Koden lägger till två nya Universitetsobjekt i kontexten. Rumsliga egenskaper initieras med hjälp av metoden DbGeography.FromText. Geografipunkten som representeras som WellKnownText skickas till metoden. Koden sparar sedan data. Sedan konstrueras och körs LINQ-frågan som returnerar ett University-objekt där dess plats är närmast den angivna platsen.

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);
}

Kompilera och kör programmet. Programmet genererar följande utdata:

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

Visa den genererade databasen

När du kör programmet första gången skapar Entity Framework en databas åt dig. Eftersom Visual Studio 2012 är installerat skapas databasen på LocalDB-instansen. Som standard namnger Entity Framework databasen efter det fullständigt kvalificerade namnet på den härledda kontexten (i det här exemplet är SpatialCodeFirst.UniversityContext). Följande gånger används den befintliga databasen.  

Observera att om du gör några ändringar i din modell när databasen har skapats bör du använda Code First Migrations för att uppdatera databasschemat. Se Koda först till en ny databas för ett exempel på hur du använder migreringar.

Om du vill visa databasen och data gör du följande:

  1. I huvudmenyn i Visual Studio 2012 väljer du Visa ->SQL Server Object Explorer.
  2. Om LocalDB inte finns med i listan över servrar klickar du på höger musknapp på SQL Server och väljer Lägg till SQL Server Använd standard-Windows-autentisering för att ansluta till LocalDB-instansen
  3. Expandera LocalDB-noden
  4. Expandera mappen Databaser för att se den nya databasen och bläddra till tabellen Universitet
  5. Om du vill visa data högerklickar du på tabellen och väljer Visa data

Sammanfattning

I den här genomgången tittade vi på hur du använder rumsliga typer med Entity Framework Code First.