Condividi tramite


Spatial - EF Designer

Annotazioni

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, alcune o tutte le informazioni non si applicano.

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 principali di dati spaziali: geografia e geometria. Il tipo di dati geography archivia i dati ellissoidali , ad esempio coordinate di latitudine e longitudine GPS. Il tipo di dati geometry rappresenta un sistema euclideo di coordinate (piano).

Guardare 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 esegue 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à di Metadata Artifact Processing del file .edmx su "Incorporare nell'assembly di output" affinché i file di metadati generati siano 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 mappano alle entità nel modello .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 Properties window (Apri posizione) e modificare il tipo della nuova proprietà in Geography
  7. Salvare il modello e compilare il progetto

    Annotazioni

    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 Entity Designer e scegliere Genera database da modello
  2. Viene visualizzata la finestra di dialogo Scegli connessione dati della Generazione guidata database. Fare clic sul pulsante Nuova connessione. 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. Cliccare su Avanti e la Creazione guidata del 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. Nota che il DDL non contiene una definizione per una tabella che esegue il mapping al tipo di enumerazione.
  5. Fare clic su Fine. Il clic su Fine non esegue lo script DDL.
  6. La Creazione guidata Database esegue le operazioni seguenti: Apre il file UniversityModel.edmx.sql nell'editor T-SQL; genera le sezioni dello schema dello store e del mapping del file EDMX; aggiunge le informazioni sulla 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 Connetti al server, immettere le informazioni di connessione del passaggio 2 e fare clic su Connetti
  8. Per visualizzare lo schema generato, fare clic con il pulsante destro del mouse sul nome del database in Esplora oggetti di SQL Server e scegliere Aggiorna

Persistenza e recupero dei 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, viene costruita ed eseguita una query LINQ che restituisce un oggetto Università la cui posizione è più vicina a quella specificata.

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 ed eseguire l'applicazione. 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 Esplora oggetti di SQL Server e scegliere Aggiorna. Fare quindi clic sul pulsante destro del mouse nella tabella e selezionare Visualizza dati.

Sommario

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.