Spaziale - Ef Designer

Nota

Solo EF5 e versioni successive : le funzionalità, le API e così via descritte in questa pagina sono state introdotte in Entity Framework 5. Se si usa una versione precedente, le informazioni qui riportate, o parte di esse, non sono applicabili.

Il video e la procedura dettagliata illustrano come eseguire il mapping dei tipi spaziali con Entity Framework Designer. Viene inoltre illustrato come usare una query LINQ per trovare una distanza tra due posizioni.

Questa procedura dettagliata userà Model First per creare un nuovo database, ma Ef Designer può essere usato anche con il flusso di lavoro Database First per eseguire il mapping a un database esistente.

Il supporto dei tipi spaziali è stato introdotto in Entity Framework 5. Si noti che per usare le nuove funzionalità, ad esempio il tipo spaziale, le enumerazioni e le funzioni con valori di tabella, è necessario usare .NET Framework 4.5. Visual Studio 2012 è destinato a .NET 4.5 per impostazione predefinita.

Per usare i tipi di dati spaziali, è necessario usare anche un provider Entity Framework con supporto spaziale. Per altre informazioni, vedere Supporto del provider per i tipi spaziali.

Esistono due tipi di dati spaziali principali: geography e geometry. Il tipo di dati geography archivia i dati ellissoidali , ad esempio coordinate di latitudine e longitudine GPS. Il tipo di dati geometry rappresenta il sistema di coordinate Euclidean (flat).

Guarda il video

Questo video illustra come eseguire il mapping dei tipi spaziali con Entity Framework Designer. Viene inoltre illustrato come usare una query LINQ per trovare una distanza tra due posizioni.

Presentato da: Julia Kornich

Video: WMV | MP4 | WMV (ZIP)

Prerequisiti

Per completare questa procedura dettagliata, è necessario avere installato Visual Studio 2012, Ultimate, Premium, Professional o Web Express Edition.

Configurare il progetto

  1. Aprire Visual Studio 2012
  2. Scegliere Nuovo dal menu File e quindi fare clic su Progetto
  3. Nel riquadro sinistro fare clic su Visual C#, quindi selezionare il modello console
  4. Immettere SpatialEFDesigner come nome del progetto e fare clic su OK

Creare un nuovo modello usando Entity Framework Designer

  1. Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni, scegliere Aggiungi, quindi fare clic su Nuovo elemento
  2. Selezionare Dati dal menu a sinistra e quindi selezionare ADO.NET Entity Data Model nel riquadro Modelli
  3. Immettere UniversityModel.edmx per il nome del file e quindi fare clic su Aggiungi
  4. Nella pagina Entity Data Model Wizard (Creazione guidata Entity Data Model) selezionare Empty Model (Modello vuoto) nella finestra di dialogo Choose Model Contents (Scegli contenuto modello)
  5. Fare clic su Fine

Viene visualizzato Entity Designer, che fornisce un'area di progettazione per la modifica del modello.

La procedura guidata consente di effettuare le azioni seguenti:

  • Genera il file EnumTestModel.edmx che definisce il modello concettuale, il modello di archiviazione e il mapping tra di essi. Imposta la proprietà Metadata Artifact Processing del file con estensione edmx su Incorpora nell'assembly di output in modo che i file di metadati generati vengano incorporati nell'assembly.
  • Aggiunge un riferimento agli assembly seguenti: EntityFramework, System.ComponentModel.DataAnnotations e System.Data.Entity.
  • Crea UniversityModel.tt e UniversityModel.Context.tt file e li aggiunge nel file con estensione edmx. Questi file modello T4 generano il codice che definisce il tipo derivato DbContext e i tipi POCO che eseguono il mapping alle entità nel modello con estensione edmx

Aggiungere un nuovo tipo di entità

  1. Fare clic con il pulsante destro del mouse su un'area vuota dell'area di progettazione, selezionare Aggiungi -> Entità. Verrà visualizzata la finestra di dialogo Nuova entità.
  2. Specificare University per il nome del tipo e specificare UniversityID per il nome della proprietà chiave, lasciare il tipo int32
  3. Fare clic su OK.
  4. Fare clic con il pulsante destro del mouse sull'entità e scegliere Aggiungi nuovo -> Proprietà scalare
  5. Rinominare la nuova proprietà in Name
  6. Aggiungere un'altra proprietà scalare e rinominarla in Location Open the Finestra Proprietà e modificare il tipo della nuova proprietà in Geography
  7. Salvare il modello e compilare il progetto

    Nota

    Quando si compila, gli avvisi relativi a entità e associazioni non mappate possono essere visualizzati nell'elenco errori. È possibile ignorare questi avvisi perché dopo aver scelto di generare il database dal modello, gli errori verranno ignorati.

Generare un database dal modello

È ora possibile generare un database basato sul modello.

  1. Fare clic con il pulsante destro del mouse su uno spazio vuoto nell'area Di Progettazione entità e scegliere Genera database da modello
  2. Viene visualizzata la finestra di dialogo Choose Your Data Connessione ion della Creazione guidata database fare clic sul pulsante Nuovo Connessione ion Specifica (localdb)\mssqllocaldb per il nome del server e università per il database e fare clic su OK
  3. Verrà visualizzata una finestra di dialogo in cui viene chiesto se si vuole creare un nuovo database, fare clic su .
  4. Fare clic su Avanti e la Creazione guidata database genera il linguaggio DDL (Data Definition Language) per la creazione di un database Il DDL generato viene visualizzato nella finestra di dialogo Riepilogo e Impostazioni Si noti che il DDL non contiene una definizione per una tabella che esegue il mapping al tipo di enumerazione
  5. Fare clic su Fine facendo clic su Fine non esegue lo script DDL.
  6. La Creazione guidata database esegue le operazioni seguenti: Apre UniversityModel.edmx.sql nell'editor T-SQL Genera le sezioni di mapping e schema dell'archivio del file EDMX Aggiunge informazioni stringa di connessione al file App.config
  7. Fare clic sul pulsante destro del mouse nell'editor T-SQL e selezionare Esegui la finestra di dialogo Esegui Connessione al server, immettere le informazioni di connessione del passaggio 2 e fare clic su Connessione
  8. Per visualizzare lo schema generato, fare clic con il pulsante destro del mouse sul nome del database in SQL Server Esplora oggetti e scegliere Aggiorna

Rendere persistenti e recuperare i dati

Aprire il file Program.cs in cui è definito il metodo Main. Aggiungere il codice seguente alla funzione Main.

Il codice aggiunge due nuovi oggetti University al contesto. Le proprietà spaziali vengono inizializzate usando il metodo DbGeography.FromText. Il punto geografico rappresentato come WellKnownText viene passato al metodo . Il codice salva quindi i dati. Quindi, la query LINQ che restituisce un oggetto University in cui la posizione è più vicina alla posizione specificata, viene costruita ed eseguita.

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

Compilare l'applicazione ed eseguirla. Il programma produce l'output seguente:

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

Per visualizzare i dati nel database, fare clic con il pulsante destro del mouse sul nome del database in SQL Server Esplora oggetti e scegliere Aggiorna. Fare quindi clic sul pulsante destro del mouse nella tabella e selezionare Visualizza dati.

Riepilogo

In questa procedura dettagliata è stato illustrato come eseguire il mapping dei tipi spaziali usando Entity Framework Designer e come usare i tipi spaziali nel codice.