Spatial – EF Designer
Poznámka
Pouze EF5 – funkce, rozhraní API atd. probírané na této stránce byly představeny v Entity Frameworku 5. Pokud používáte starší verzi, některé nebo všechny informace nemusí být platné.
Video a podrobný návod ukazuje, jak mapovat prostorové typy pomocí Návrháře entity Framework. Ukazuje také, jak pomocí dotazu LINQ najít vzdálenost mezi dvěma umístěními.
Tento názorný postup použije model First k vytvoření nové databáze, ale nástroj EF Designer se dá použít také s pracovním postupem Database First k mapování na existující databázi.
Podpora prostorového typu byla zavedena v Entity Frameworku 5. Všimněte si, že pokud chcete používat nové funkce, jako jsou prostorové typy, výčty a funkce s hodnotou tabulky, musíte cílit na rozhraní .NET Framework 4.5. Visual Studio 2012 ve výchozím nastavení cílí na .NET 4.5.
Pokud chcete použít prostorové datové typy, musíte také použít zprostředkovatele Entity Framework, který má prostorovou podporu. Další informace najdete v podpoře poskytovatele prostorových typů .
Existují dva hlavní datové typy prostorových dat: zeměpis a geometrie. Zeměpisný datový typ ukládá elipsoidální data (například souřadnice zeměpisné šířky a délky GPS). Datový typ geometrie představuje euklidský (plochý) souřadnicový systém.
Přehrát video
Toto video ukazuje, jak mapovat prostorové typy pomocí Návrháře entity Framework. Ukazuje také, jak pomocí dotazu LINQ najít vzdálenost mezi dvěma umístěními.
Autor: Julia Kornich
Předpoklady
K dokončení tohoto návodu budete muset mít nainstalovanou edici Visual Studio 2012, Ultimate, Premium, Professional nebo Web Express.
Nastavení projektu
- Otevření sady Visual Studio 2012
- V nabídce Soubor přejděte na příkaz Nový a klepněte na příkaz Projekt
- V levém podokně klikněte na Visual C# a pak vyberte šablonu konzoly .
- Jako název projektu zadejte SpatialEFDesigner a klikněte na OK.
Vytvoření nového modelu pomocí návrháře EF
- Klikněte pravým tlačítkem myši na název projektu v Průzkumník řešení, přejděte na příkaz Přidat a potom klikněte na položku Nová položka.
- V nabídce vlevo vyberte Data a pak v podokně Šablony vyberte ADO.NET Model dat entity.
- Jako název souboru zadejte UniversityModel.edmx a potom klikněte na Přidat.
- Na stránce Průvodce datovým modelem entity vyberte v dialogovém okně Zvolit obsah modelu prázdný model .
- Klikněte na Dokončit.
Zobrazí se Návrhář entit, který poskytuje návrhovou plochu pro úpravy modelu.
Průvodce provede následující akce:
- Vygeneruje soubor EnumTestModel.edmx, který definuje koncepční model, model úložiště a mapování mezi nimi. Nastaví vlastnost Zpracování artefaktů metadat souboru .edmx na vložit do výstupního sestavení, aby generované soubory metadat byly vloženy do sestavení.
- Přidá odkaz na následující sestavení: EntityFramework, System.ComponentModel.DataAnnotations a System.Data.Data.Entity.
- Vytvoří UniversityModel.tt a UniversityModel.Context.tt soubory a přidá je do souboru .edmx. Tyto soubory šablon T4 generují kód, který definuje odvozený typ DbContext a typy POCO, které se mapují na entity v modelu .edmx.
Přidání nového typu entity
- Klikněte pravým tlačítkem myši na prázdnou oblast návrhové plochy, vyberte Přidat –> Entita, zobrazí se dialogové okno Nová entita.
- Zadejte university pro název typu a jako název klíčové vlastnosti zadejte UNIVERSITYID , zadejte typ int32 .
- Klikněte na tlačítko OK.
- Klikněte pravým tlačítkem myši na entitu a vyberte Přidat novou –> skalární vlastnost.
- Přejmenování nové vlastnosti na Name
- Přidejte další skalární vlastnost a přejmenujte ji na Umístění Otevřete okno Vlastnosti a změňte typ nové vlastnosti na Geography.
- Uložení modelu a sestavení projektu
Poznámka
Při sestavování se můžou v seznamu chyb zobrazovat upozornění na nemapované entity a přidružení. Tato upozornění můžete ignorovat, protože jakmile se rozhodneme vygenerovat databázi z modelu, chyby zmizí.
Generování databáze z modelu
Teď můžeme vygenerovat databázi založenou na modelu.
- Klikněte pravým tlačítkem myši na prázdné místo na ploše Návrháře entit a vyberte Vygenerovat databázi z modelu.
- Dialogové okno Zvolit data Připojení ion v Průvodci generováním databáze se zobrazí kliknutím na tlačítko Nový Připojení ion Zadat (localdb)\mssqllocaldb pro název serveru a university pro databázi a klepněte na tlačítko OK
- Otevře se dialogové okno s dotazem, jestli chcete vytvořit novou databázi, klikněte na ano.
- Click Next and the Create Database Wizard generates data definition language (DDL) for create a database The generated DDL is displayed in the Summary and Nastavení Dialog Box Note, that the DDL not contain a definition for a table that maps to the enumeration type
- Po kliknutí na tlačítko Dokončit se nespustí skript DDL.
- Průvodce vytvořením databáze provede následující akce: Otevře UniversityModel.edmx.sql v editoru T-SQL vygeneruje oddíly schématu a mapování úložiště souboru EDMX přidá připojovací řetězec informace do souboru App.config.
- Klikněte na pravé tlačítko myši v editoru T-SQL a vyberte spustit dialogové okno Připojení na server, zadejte informace o připojení z kroku 2 a klikněte na Připojení
- Pokud chcete zobrazit vygenerované schéma, klikněte pravým tlačítkem na název databáze v SQL Serveru Průzkumník objektů a vyberte Aktualizovat.
Uchování a načtení dat
Otevřete soubor Program.cs, kde je definována metoda Main. Do funkce Main přidejte následující kód.
Kód přidá do kontextu dva nové university objekty. Prostorové vlastnosti se inicializují pomocí metody DbGeography.FromText. Zeměpisný bod reprezentovaný jako WellKnownText je předán metodě. Kód pak uloží data. Potom se vytvoří a spustí dotaz LINQ, který vrátí objekt univerzity, který je nejblíže zadanému umístění.
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);
}
Zkompilujte a spusťte aplikaci. Program vytvoří následující výstup:
The closest University to you is: School of Fine Art.
Pokud chcete zobrazit data v databázi, klikněte pravým tlačítkem myši na název databáze v SQL Serveru Průzkumník objektů a vyberte Aktualizovat. Potom klikněte na pravé tlačítko myši v tabulce a vyberte Zobrazit data.
Souhrn
V tomto názorném postupu jsme se podívali, jak mapovat prostorové typy pomocí Návrháře entity Framework a jak používat prostorové typy v kódu.