Share via


Modelli e accesso ai dati di ASP.NET MVC 4

Per il team dei campi Web

Scaricare Il kit di training per i campi Web

Questo lab pratico presuppone che si abbia una conoscenza di base di ASP.NET MVC. Se non è stato usato ASP.NET MVC prima, è consigliabile passare a ASP.NET lab pratico MVC 4 .

Questo lab illustra i miglioramenti e le nuove funzionalità descritte in precedenza applicando modifiche secondarie a un'applicazione Web di esempio fornita nella cartella Origine.

Nota

Tutti i frammenti di codice e codice di esempio sono inclusi nel Web Camps Training Kit, disponibile in Microsoft-Web/WebCampTrainingKit Release. Il progetto specifico per questo lab è disponibile in ASP.NET modelli MVC 4 e accesso ai dati.

In ASP.NET Lab pratico MVC è stato passato dati hardcoded dai controller ai modelli di visualizzazione. Tuttavia, per creare un'applicazione Web reale, è possibile usare un database reale.

Questo lab pratico illustra come usare un motore di database per archiviare e recuperare i dati necessari per l'applicazione Music Store. A tale scopo, si inizierà con un database esistente e si creerà il modello di dati di entità da esso. In questo lab si incontrerà l'approccio Database First e l'approccio Code First .

Tuttavia, è anche possibile usare l'approccio Model First , creare lo stesso modello usando gli strumenti e quindi generare il database da esso.

Database First vs

Database First vs. Model First

Dopo aver generato il modello, verranno apportate le modifiche appropriate in StoreController per fornire le visualizzazioni dell'archivio con i dati acquisiti dal database, anziché usare i dati hardcoded. Non sarà necessario apportare alcuna modifica ai modelli di visualizzazione perché StoreController restituirà gli stessi Modelli di visualizzazione ai modelli di visualizzazione, anche se questa volta i dati verranno restituiti dal database.

Primo approccio al codice

L'approccio Code First consente di definire il modello dal codice senza generare classi generalmente associate al framework.

Nel codice, gli oggetti modello vengono definiti con poCOs, "Plain Old CLR Objects". I POCO sono classi semplici che non hanno ereditarietà e non implementano interfacce. È possibile generare automaticamente il database da essi oppure è possibile usare un database esistente e generare il mapping della classe dal codice.

I vantaggi dell'uso di questo approccio sono che il modello rimane indipendente dal framework di persistenza (in questo caso Entity Framework), poiché le classi POCOs non sono associate al framework di mapping.

Nota

Questo lab si basa su ASP.NET MVC 4 e una versione dell'applicazione di esempio di Music Store personalizzata e ridotta al minimo per adattarsi solo alle funzionalità visualizzate in questo lab di Hands-On.

Se si desidera esplorare l'intera applicazione di esercitazione di Music Store , è possibile trovarla in MVC-Music-Store.

Prerequisiti

Per completare questo lab, è necessario disporre degli elementi seguenti:

Installazione

Installazione di frammenti di codice

Per praticità, gran parte del codice che si gestirà lungo questo lab è disponibile come frammenti di codice di Visual Studio. Per installare i frammenti di codice, eseguire il file .\Source\Setup\CodeSnippets.vsi .

Se non si ha familiarità con i frammenti di codice di Visual Studio e si vuole imparare a usarli, è possibile fare riferimento all'appendice di questo documento "Appendice C: Uso di frammenti di codice".


Esercizi

Questo lab pratico è costituito dagli esercizi seguenti:

  1. Esercizio 1: Aggiunta di un database
  2. Esercizio 2: Creazione di un database con code first
  3. Esercizio 3: Esecuzione di query sul database con parametri

Nota

Ogni esercizio è accompagnato da una cartella End contenente la soluzione risultante da ottenere dopo aver completato gli esercizi. È possibile usare questa soluzione come guida se sono necessarie ulteriori informazioni su come usare gli esercizi.

Tempo stimato per completare questo lab: 35 minuti.

Esercizio 1: Aggiunta di un database

In questo esercizio si apprenderà come aggiungere un database con le tabelle dell'applicazione MusicStore alla soluzione per usare i dati. Dopo aver generato il database con il modello e aggiunto alla soluzione, verrà modificata la classe StoreController per fornire al modello Di visualizzazione i dati acquisiti dal database anziché usare valori hardcoded.

Attività 1 - Aggiunta di un database

In questa attività si aggiungerà un database già creato con le tabelle principali dell'applicazione MusicStore alla soluzione.

  1. Aprire la soluzione Begin disponibile nella cartella Source/Ex1-AddingADatabaseDBFirst/Begin/ .

    1. È necessario scaricare alcuni pacchetti NuGet mancanti prima di continuare. A tale scopo, fare clic sul menu Progetto e selezionare Gestisci pacchetti NuGet.

    2. Nella finestra di dialogo Gestisci pacchetti NuGet fare clic su Ripristina per scaricare pacchetti mancanti.

    3. Compilare infine la soluzione facendo clic su Compila | soluzione.

      Nota

      Uno dei vantaggi dell'uso di NuGet è che non è necessario inviare tutte le librerie nel progetto, riducendo le dimensioni del progetto. Con NuGet Power Tools, specificando le versioni del pacchetto nel file Packages.config, sarà possibile scaricare tutte le librerie necessarie la prima volta che si esegue il progetto. Questo è il motivo per cui è necessario eseguire questi passaggi dopo aver aperto una soluzione esistente da questo lab.

  2. Aggiungere il file di database MvcMusicStore . In questo lab pratico si userà un database già creato denominato MvcMusicStore.mdf. A tale scopo, fare clic con il pulsante destro del mouse sulla cartella App_Data, scegliere Aggiungi e quindi fare clic su Elemento esistente. Passare a \Source\Assets e selezionare il file MvcMusicStore.mdf .

    Aggiunta di un elemento esistente che aggiunge un elemento

    Aggiunta di un elemento esistente

    database MvcMusicStore.mdf MvcMusicStore.mdfFile di

    File di database MvcMusicStore.mdf

    Il database è stato aggiunto al progetto. Anche quando il database si trova all'interno della soluzione, è possibile eseguire query e aggiornarlo come ospitato in un server di database diverso.

    Database MvcMusicStore nel database Esplora soluzioni MvcMusicStore in Esplora soluzioni

    Database MvcMusicStore in Esplora soluzioni

  3. Verificare la connessione al database. A tale scopo, fare doppio clic su MvcMusicStore.mdf per stabilire una connessione.

    Connessione a MvcMusicStore.mdf Connessione a

    Connessione a MvcMusicStore.mdf

Attività 2 - Creazione di un modello di dati

In questa attività verrà creato un modello di dati per interagire con il database aggiunto nell'attività precedente.

  1. Creare un modello di dati che rappresenta il database. A tale scopo, in Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Modelli, scegliere Aggiungi e quindi fare clic su Nuovo elemento. Nella finestra di dialogo Aggiungi nuovo elemento selezionare il modello di dati e quindi ADO.NET elemento Entity Data Model . Modificare il nome del modello di dati in StoreDB.edmx e fare clic su Aggiungi.

    Aggiunta del modello di dati dell'entità StoreDB ADO.NET aggiunta

    Aggiunta del modello di dati dell'entità StoreDB ADO.NET

  2. Verrà visualizzata la Creazione guidata modello di dati di entità . Questa procedura guidata illustra la creazione del livello modello. Poiché il modello deve essere creato in base al database esistente aggiunto di recente, selezionare Genera dal database e fare clic su Avanti.

    Scelta del contenuto del modello Scelta del contenuto

    Scelta del contenuto del modello

  3. Poiché si genera un modello da un database, è necessario specificare la connessione da usare. Fare clic su Nuova connessione.

  4. Selezionare Microsoft SQL Server File di database e fare clic su Continua.

    Scegliere origine dati Scegliere

    Finestra di dialogo Scegliere origine dati

  5. Fare clic su Sfoglia e selezionare il database MvcMusicStore.mdf che si trova nella cartella App_Data e fare clic su OK.

    Proprietà di connessione

    Proprietà di connessione

  6. La classe generata deve avere lo stesso nome della stringa di connessione dell'entità, quindi modificare il nome in MusicStoreEntities e fare clic su Avanti.

    Scelta della connessione dati Scelta della connessione dati

    Scelta della connessione dati

  7. Scegliere gli oggetti di database da usare. Poiché il modello di entità userà solo le tabelle del database, selezionare l'opzione Tabelle e assicurarsi che siano selezionate anche le opzioni Includi colonne chiave esterna nel modello e Pluralize o singolarizzare i nomi di oggetti generati . Modificare lo spazio dei nomi modello in MvcMusicStore.Model e fare clic su Fine.

    Scelta degli oggetti di database Scelta degli oggetti di database

    Scelta degli oggetti di database

    Nota

    Se viene visualizzata una finestra di dialogo Avviso di sicurezza, fare clic su OK per eseguire il modello e generare le classi per le entità del modello.

  8. Verrà visualizzato un diagramma di entità per il database, mentre verrà creata una classe separata che esegue il mapping di ogni tabella al database. Ad esempio, la tabella Albums verrà rappresentata da una classe Album , in cui ogni colonna della tabella verrà mappata a una proprietà di classe. In questo modo è possibile eseguire query e usare oggetti che rappresentano righe nel database.

    Diagramma entità diagramma entità

    Diagramma dell'entità

    Nota

    I modelli T4 (.tt) eseguono il codice per generare le classi di entità e sovrascriveranno le classi esistenti con lo stesso nome. In questo esempio le classi "Album", "Genre" e "Artist" sono state sovrascritte con il codice generato.

Attività 3 - Compilazione dell'applicazione

In questa attività si verificherà che, anche se la generazione del modello ha rimosso le classi di modelli Album, Genere e Artista, il progetto viene compilato correttamente usando le nuove classi del modello di dati.

  1. Compilare il progetto selezionando la voce di menu Compila e quindi Compila MvcMusicStore.

    Compilazione del progetto Compilazione del progetto

    Compilazione del progetto

  2. Il progetto viene compilato correttamente. Perché funziona ancora? Funziona perché le tabelle di database hanno campi che includono le proprietà che si usavano nelle classi rimosse Album e Genere.

    Compilazioni riuscite

    Compilazioni riuscite

  3. Mentre la finestra di progettazione visualizza le entità in un formato diagramma, sono in realtà classi C#. Espandere il nodo StoreDB.edmx nella Esplora soluzioni e quindi StoreDB.tt, verranno visualizzate le nuove entità generate.

    File

    File generati

Attività 4 - Esecuzione di query sul database

In questa attività si aggiornerà la classe StoreController in modo che, anziché usare i dati hardcoded, verrà eseguita una query sul database per recuperare le informazioni.

  1. Aprire Controller\StoreController.cs e aggiungere il campo seguente alla classe per contenere un'istanza della classe MusicStoreEntities , denominata storeDB:

    (Frammento di codice - Modelli e accesso ai dati - Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
    
  2. La classe MusicStoreEntities espone una proprietà di raccolta per ogni tabella nel database. Aggiornare il metodo di azione Browse per recuperare un genere con tutti gli album.

    (Frammento di codice - Modelli e accesso ai dati - Sfoglia archivio ex1)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
        return this.View(genreModel);
    }
    

    Nota

    Si usa una funzionalità di .NET denominata LINQ (query integrata nel linguaggio) per scrivere espressioni di query fortemente tipizzata su queste raccolte, che eseguirà codice sul database e restituirà oggetti che è possibile programmare.

    Per altre informazioni su LINQ, visitare il sito msdn.

  3. Aggiornare il metodo di azione Index per recuperare tutti i generi.

    (Frammento di codice - Modelli e accesso ai dati - Indice dell'archivio ex1)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Aggiornare il metodo di azione Index per recuperare tutti i generi e trasformare la raccolta in un elenco.

    (Frammento di codice - Modelli e accesso ai dati - Ex1 Store GenreMenu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

Attività 5 - Esecuzione dell'applicazione

In questa attività si verificherà che la pagina Indice dello Store visualizzerà ora i generi archiviati nel database anziché quelli hardcoded. Non è necessario modificare il modello di visualizzazione perché StoreController restituisce le stesse entità di prima, anche se questa volta i dati provengono dal database.

  1. Ricompilare la soluzione e premere F5 per eseguire l'applicazione.

  2. Il progetto inizia nella home page. Verificare che il menu di Genere non sia più un elenco hardcoded e che i dati vengano recuperati direttamente dal database.

    Screenshot che mostra una pagina di genere musicale in cui è possibile verificare il menu Genere.

    Esplorazione di generi dal database

  3. Passare a qualsiasi genere e verificare che gli album vengano popolati dal database.

    Screenshot che mostra una visualizzazione in cui è possibile esplorare gli album dal database.

    Esplorazione degli album dal database

Esercizio 2: Creazione di un database usando prima il codice

In questo esercizio si apprenderà come usare l'approccio Code First per creare un database con le tabelle dell'applicazione MusicStore e come accedere ai dati.

Dopo aver generato il modello, si modificherà StoreController per fornire al modello di visualizzazione i dati acquisiti dal database anziché usare i valori hardcoded.

Nota

Se l'esercizio 1 è stato completato e si è già lavorato con l'approccio Database First, si apprenderà come ottenere gli stessi risultati con un processo diverso. Le attività comuni con Esercizio 1 sono state contrassegnate per semplificare la lettura. Se l'esercizio 1 non è stato completato, ma si vuole imparare l'approccio Code First, è possibile iniziare da questo esercizio e ottenere una copertura completa dell'argomento.

Attività 1 - Popolamento dei dati di esempio

In questa attività verrà popolato il database con dati di esempio quando viene inizialmente creato usando Code-First.

  1. Aprire la soluzione Begin disponibile nella cartella Source/Ex2-CreatingADatabaseCodeFirst/Begin/ . In caso contrario, è possibile continuare a usare la soluzione End ottenuta completando l'esercizio precedente.

    1. Se si apre la soluzione Begin fornita, è necessario scaricare alcuni pacchetti NuGet mancanti prima di continuare. A tale scopo, fare clic sul menu Progetto e selezionare Gestisci pacchetti NuGet.

    2. Nella finestra di dialogo Gestisci pacchetti NuGet fare clic su Ripristina per scaricare pacchetti mancanti.

    3. Compilare infine la soluzione facendo clic su Compila | soluzione.

      Nota

      Uno dei vantaggi dell'uso di NuGet è che non è necessario inviare tutte le librerie nel progetto, riducendo le dimensioni del progetto. Con NuGet Power Tools, specificando le versioni del pacchetto nel file Packages.config, sarà possibile scaricare tutte le librerie necessarie la prima volta che si esegue il progetto. Questo è il motivo per cui è necessario eseguire questi passaggi dopo aver aperto una soluzione esistente da questo lab.

  2. Aggiungere il file SampleData.cs alla cartella Models . A tale scopo, fare clic con il pulsante destro del mouse sulla cartella Modelli , scegliere Aggiungi e quindi fare clic su Elemento esistente. Passare a \Source\Assets e selezionare il file SampleData.cs .

    I dati di esempio popolano il codice Di esempio di

    Codice popolato di dati di esempio

  3. Aprire il file Global.asax.cs e aggiungere le istruzioni using seguenti.

    (Frammento di codice - Modelli e accesso ai dati - Uso di asax globale ex2)

    using MvcMusicStore.Models;
    using System.Data.Entity;
    
  4. Nel metodo Application_Start() aggiungere la riga seguente per impostare l'inizializzatore del database.

    (Frammento di codice - Modelli e accesso ai dati - Ex2 Global Asax SetInitializer)

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        Database.SetInitializer(new SampleData());
    }
    

Attività 2 - Configurazione della connessione al database

Dopo aver già aggiunto un database al progetto, si scriverà nel file Web.config la stringa di connessione.

  1. Aggiungere una stringa di connessione in Web.config. A tale scopo, aprire Web.config nella radice del progetto e sostituire la stringa di connessione denominata DefaultConnection con questa riga nella <sezione connectionStrings> :

    Web.config percorso file

    Web.config percorso file

    <configuration>
    ...
      <connectionStrings>
        <add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />
      </connectionStrings>
    ...
    

Attività 3 - Uso del modello

Dopo aver già configurato la connessione al database, si collega il modello alle tabelle di database. In questa attività verrà creata una classe collegata al database con Code First. Tenere presente che è presente una classe modello POCO esistente che deve essere modificata.

Nota

Se l'esercizio 1 è stato completato, si noterà che questo passaggio è stato eseguito da una procedura guidata. Eseguendo Code First, si creeranno manualmente classi collegate alle entità dati.

  1. Aprire la classe di modello POCO dalla cartella del progetto Models e includere un ID. Usare una proprietà int con il nome GenreId.

    (Frammento di codice - Modelli e accesso ai dati - Primo genere di codice ex2)

    namespace MvcMusicStore.Models
    {
        using System.Collections.Generic;
    
        public class Genre
        {
          public int GenreId { get; set; }
    
          public string Name { get; set; }
    
          public string Description { get; set; }
    
          public List<Album> Albums { get; set; }
        }
    }
    

    Nota

    Per usare le convenzioni Code First, la classe Genere deve avere una proprietà chiave primaria che verrà rilevata automaticamente.

    Per altre informazioni sulle convenzioni code first, vedere questo articolo msdn.

  2. Aprire ora l'Album della classe modello POCO dalla cartella del progetto Models e includere le chiavi esterne, creare proprietà con i nomi GenreId e ArtistId. Questa classe ha già l'oggetto GenreId per la chiave primaria.

    (Frammento di codice - Modelli e accesso ai dati - Ex2 Code First Album)

    namespace MvcMusicStore.Models
    {
        public class Album
        {
            public int AlbumId { get; set; }
    
            public int GenreId { get; set; }
    
            public int ArtistId { get; set; }
    
            public string Title { get; set; }
    
            public decimal Price { get; set; }
    
            public string AlbumArtUrl { get; set; }
    
            public virtual Genre Genre { get; set; }
    
            public virtual Artist Artist { get; set; }
        }
    }
    
  3. Aprire la classe POCO model Artist e includere la proprietà ArtistId .

    (Frammento di codice - Modelli e accesso ai dati - Ex2 Code First Artist)

    namespace MvcMusicStore.Models
    {
        public class Artist
        {
            public int ArtistId { get; set; }
    
            public string Name { get; set; }
        }
    }
    
  4. Fare clic con il pulsante destro del mouse sulla cartella del progetto Modelli e scegliere Aggiungi | Classe. Assegnare un nome al file MusicStoreEntities.cs. Fare quindi clic su Aggiungi.

    Aggiunta di una classe Aggiunta di una classe

    Aggiunta di un nuovo elemento

    Aggiunta di una classe2 Aggiunta di una classe2

    Aggiunta di una classe

  5. Aprire la classe appena creata, MusicStoreEntities.cs e includere gli spazi dei nomi System.Data.Entity e System.Data.Entity.Infrastructure.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    ...
    
  6. Sostituire la dichiarazione di classe per estendere la classe DbContext : dichiarare un dbSet pubblico e eseguire l'override del metodo OnModelCreating . Dopo questo passaggio si otterrà una classe di dominio che collega il modello a Entity Framework. A tale scopo, sostituire il codice della classe con quanto segue:

    (Frammento di codice - Modelli e accesso ai dati - Ex2 Code First MusicStoreEntities)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    namespace MvcMusicStore.Models
    {
        public class MusicStoreEntities : DbContext
        {
            public DbSet<Genre> Genres { get; set; }
    
            public DbSet<Album> Albums { get; set; }
    
            public DbSet<Artist> Artists { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Genre>().ToTable("Genres");
                modelBuilder.Entity<Album>().ToTable("Albums");
                modelBuilder.Entity<Artist>().ToTable("Artists");
    
                base.OnModelCreating(modelBuilder);
            }
        }
    }
    

Nota

Con Entity Framework DbContext e DBSet sarà possibile eseguire query sulla classe POCO Genere. Estendendo il metodo OnModelCreating , si specifica nel codice il modo in cui Genere verrà mappato a una tabella di database. Per altre informazioni su DBContext e DBSet, vedere questo articolo msdn: collegamento

Attività 4 - Esecuzione di query sul database

In questa attività si aggiornerà la classe StoreController in modo che, anziché usare i dati hardcoded, verrà recuperata dal database.

Nota

Questa attività è in comune con Esercizio 1.

Se l'esercizio 1 è stato completato, si noti che questi passaggi sono uguali in entrambi gli approcci (Database first o Code first). Sono diversi nel modo in cui i dati sono collegati al modello, ma l'accesso alle entità dati è ancora trasparente dal controller.

  1. Aprire Controller\StoreController.cs e aggiungere il campo seguente alla classe per contenere un'istanza della classe MusicStoreEntities , denominata storeDB:

    (Frammento di codice - Modelli e accesso ai dati - Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
        ...
    }
    
  2. La classe MusicStoreEntities espone una proprietà di raccolta per ogni tabella nel database. Aggiornare il metodo di azione Browse per recuperare un genere con tutti gli album.

    (Frammento di codice - Modelli e accesso ai dati - Sfoglia archivio ex2)

    public ActionResult Browse(string genre)
    {
         // Retrieve Genre and its Associated Albums from database
         var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
         return this.View(genreModel);
    }
    

    Nota

    Si usa una funzionalità di .NET denominata LINQ (query integrata nel linguaggio) per scrivere espressioni di query fortemente tipizzata su queste raccolte, che eseguirà codice sul database e restituirà oggetti che è possibile programmare.

    Per altre informazioni su LINQ, visitare il sito msdn.

  3. Aggiornare il metodo di azione Index per recuperare tutti i generi.

    (Frammento di codice - Modelli e accesso ai dati - Indice di archiviazione ex2)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Aggiornare il metodo di azione Index per recuperare tutti i generi e trasformare la raccolta in un elenco.

    (Frammento di codice - Modelli e accesso ai dati - Ex2 Store GenreMenu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

Attività 5 - Esecuzione dell'applicazione

In questa attività si verificherà che la pagina Indice dello Store visualizzerà ora i generi archiviati nel database anziché quelli hardcoded. Non è necessario modificare il modello di visualizzazione perché StoreController restituisce lo stesso StoreIndexViewModel , ma questa volta i dati provengono dal database.

  1. Ricompilare la soluzione e premere F5 per eseguire l'applicazione.

  2. Il progetto inizia nella home page. Verificare che il menu di Genere non sia più un elenco hardcoded e che i dati vengano recuperati direttamente dal database.

    Screenshot che mostra una pagina di genere musicale in cui è possibile verificare che il menu Genere venga recuperato dal database.

    Esplorazione di generi dal database

  3. Passare a qualsiasi genere e verificare che gli album vengano popolati dal database.

    Screenshot che mostra una visualizzazione in cui si verifica che gli album vengano popolati dal database.

    Esplorazione degli album dal database

Esercizio 3: Esecuzione di query sul database con parametri

In questo esercizio si apprenderà come eseguire query sul database usando parametri e come usare Query Result Shaping, una funzionalità che riduce l'accesso al numero di database recuperando i dati in modo più efficiente.

Nota

Per altre informazioni su Query Result Shaping, vedere l'articolo msdn seguente.

Attività 1 - Modifica di StoreController per recuperare gli album dal database

In questa attività verrà modificata la classe StoreController per accedere al database per recuperare gli album da un genere specifico.

  1. Aprire la soluzione Begin disponibile nella cartella Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin se si vuole usare Code-First approccio o Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin se si vuole usare Database-First approccio. In caso contrario, è possibile continuare a usare la soluzione End ottenuta completando l'esercizio precedente.

    1. Se si apre la soluzione Begin fornita, è necessario scaricare alcuni pacchetti NuGet mancanti prima di continuare. A tale scopo, fare clic sul menu Progetto e selezionare Gestisci pacchetti NuGet.

    2. Nella finestra di dialogo Gestisci pacchetti NuGet fare clic su Ripristina per scaricare pacchetti mancanti.

    3. Compilare infine la soluzione facendo clic su Compila | soluzione.

      Nota

      Uno dei vantaggi dell'uso di NuGet è che non è necessario inviare tutte le librerie nel progetto, riducendo le dimensioni del progetto. Con NuGet Power Tools, specificando le versioni del pacchetto nel file Packages.config, sarà possibile scaricare tutte le librerie necessarie la prima volta che si esegue il progetto. Questo è il motivo per cui è necessario eseguire questi passaggi dopo aver aperto una soluzione esistente da questo lab.

  2. Aprire la classe StoreController per modificare il metodo di azione Browse . A tale scopo, nella Esplora soluzioni espandere la cartella Controller e fare doppio clic su StoreController.cs.

  3. Modificare il metodo di azione Browse per recuperare gli album per un genere specifico. A tale scopo, sostituire il codice seguente:

    (Frammento di codice - Modelli e accesso ai dati - Ex3 StoreController BrowseMethod)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = this.storeDB.Genres.Include("Albums")
            .Single(g => g.Name == genre);
    
        return this.View(genreModel);
    }
    

Nota

Per popolare una raccolta dell'entità, è necessario usare il metodo Include per specificare anche gli album. È possibile usare . Estensione Single() in LINQ perché in questo caso è previsto un solo genere per un album. Il metodo Single() accetta un'espressione Lambda come parametro, che in questo caso specifica un singolo oggetto Genre in modo che il nome corrisponda al valore definito.

Si sfrutta una funzionalità che consente di indicare altre entità correlate che si desidera caricare anche quando l'oggetto Genre viene recuperato. Questa funzionalità è denominata Query Result Shaping e consente di ridurre il numero di volte necessarie per accedere al database per recuperare informazioni. In questo scenario si vuole pre-recuperare gli Album per il genere recuperato.

La query include Genres.Include("Albums") per indicare che si desiderano anche gli album correlati. Ciò comporterà un'applicazione più efficiente, poiché recupera i dati Di genere e Album in una singola richiesta di database.

Attività 2 - Esecuzione dell'applicazione

In questa attività si eseguirà l'applicazione e si recuperano gli album di un genere specifico dal database.

  1. Premere F5 per eseguire l'applicazione.

  2. Il progetto inizia nella home page. Modificare l'URL in /Store/Browse?genre=Pop per verificare che i risultati vengano recuperati dal database.

    Navigazione in base al genere Esplorazione per genere

    Esplorazione /Store/Sfoglia?genere=Pop

Attività 3 - Accesso agli album in base all'ID

In questa attività si ripeterà la procedura precedente per ottenere gli album in base all'ID.

  1. Chiudere il browser, se necessario, per tornare a Visual Studio. Aprire la classe StoreController per modificare il metodo di azione Details . A tale scopo, nella Esplora soluzioni espandere la cartella Controller e fare doppio clic su StoreController.cs.

  2. Modificare il metodo di azione Details per recuperare i dettagli degli album in base al relativo ID. A tale scopo, sostituire il codice seguente:

    (Frammento di codice - Modelli e accesso ai dati - Dettagli di Ex3 StoreControllerMethod)

    // GET: /Store/
    public ActionResult Details(int id)
    {
        var album = this.storeDB.Albums.Find(id);
    
        if (album == null)
        {
            return this.HttpNotFound();
        }
    
        return this.View(album);
    }
    

Attività 4 - Esecuzione dell'applicazione

In questa attività si eseguirà l'applicazione in un Web browser e si otterranno i dettagli dell'album in base all'ID.

  1. Premere F5 per eseguire l'applicazione.

  2. Il progetto inizia nella home page. Modificare l'URL in /Store/Details/51 o esplorare i generi e selezionare un album per verificare che i risultati vengano recuperati dal database.

    Dettagli esplorazione dettagli esplorazione

    Navigazione /Store/Dettagli/51

Nota

È inoltre possibile distribuire questa applicazione nei siti Web di Windows Azure seguente : Pubblicazione di un'applicazione ASP.NET MVC 4 tramite Distribuzione Web.


Riepilogo

Completando questo lab pratico si sono appresi i concetti fondamentali di ASP.NET modelli MVC e accesso ai dati, usando l'approccio Di primo database e il code first approccio:

  • Come aggiungere un database alla soluzione per usare i dati
  • Come aggiornare i controller per fornire i modelli di visualizzazione con i dati acquisiti dal database anziché uno hardcoded
  • Come eseguire query sul database usando parametri
  • Come usare Query Result Shaping, una funzionalità che riduce il numero di accessi al database, recuperando i dati in modo più efficiente
  • Come usare entrambi gli approcci di Database First e Code First in Microsoft Entity Framework per collegare il database al modello

Appendice A: Installazione di Visual Studio Express 2012 per Web

È possibile installare Microsoft Visual Studio Express 2012 per Web o un'altra versione "Express" usando il Installazione guidata piattaforma Web Microsoft. Le istruzioni seguenti illustrano i passaggi necessari per installare Visual Studio Express 2012 per Web usando Installazione guidata piattaforma Web Microsoft.

  1. Passare a [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169). In alternativa, se è già stato installato Il programma di installazione della piattaforma Web, è possibile aprirlo e cercare il prodotto "Visual Studio Express 2012 per Web con Windows Azure SDK".

  2. Fare clic su Installa ora. Se non si dispone del programma di installazione della piattaforma Web , verrà eseguito il reindirizzamento per scaricare e installarlo prima.

  3. Dopo l'apertura del programma di installazione della piattaforma Web , fare clic su Installa per avviare la configurazione.

    Installare Visual Studio Express Installare Visual Studio Express

    Installare Visual Studio Express

  4. Leggere tutte le licenze e le condizioni dei prodotti e fare clic su Accetta per continuare.

    Accettazione delle condizioni di licenza

    Accettazione delle condizioni di licenza

  5. Attendere il completamento del processo di download e installazione.

    Stato di avanzamento dell'installazione

    Stato di avanzamento dell'installazione

  6. Al termine dell'installazione, fare clic su Fine.

    Installazione completata

    Installazione completata

  7. Fare clic su Esci per chiudere il programma di installazione della piattaforma Web.

  8. Per aprire Visual Studio Express per Web, passare alla schermata Start e iniziare a scrivere "VS Express", quindi fare clic sul riquadro VS Express for Web.

    Riquadro VS Express for Web

    Riquadro VS Express for Web

Appendice B: Pubblicazione di un'applicazione MVC 4 ASP.NET tramite distribuzione Web

Questa appendice illustra come creare un nuovo sito Web dal portale di gestione di Windows Azure e pubblicare l'applicazione ottenuta seguendo il lab, sfruttando la funzionalità di pubblicazione Distribuzione Web fornita da Windows Azure.

Attività 1 - Creazione di un nuovo sito Web dal portale di Windows Azure

  1. Passare al portale di gestione di Windows Azure e accedere usando le credenziali Microsoft associate alla sottoscrizione.

    Nota

    Con Windows Azure è possibile ospitare 10 ASP.NET siti Web gratuitamente e quindi ridimensionare in base alla crescita del traffico. È possibile iscriversi qui.

    Accedere a Windows portale di Azure

    Accedere al portale di gestione di Windows Azure

  2. Fare clic su Nuovo sulla barra dei comandi.

    Creazione di un nuovo sito Web Creazione di un nuovo sito Web

    Creazione di un nuovo sito Web

  3. Fare clic su Calcolo | sito Web. Selezionare quindi l'opzione Creazione rapida . Specificare un URL disponibile per il nuovo sito Web e fare clic su Crea sito Web.

    Nota

    Un sito Web di Windows Azure è l'host per un'applicazione Web in esecuzione nel cloud che è possibile controllare e gestire. L'opzione Creazione rapida consente di distribuire un'applicazione Web completata nel sito Web di Windows Azure dall'esterno del portale. Non include passaggi per la configurazione di un database.

    Creazione di un nuovo sito Web con creazione rapida di un nuovo sito Web con creazione rapida

    Creazione di un nuovo sito Web con creazione rapida

  4. Attendere la creazione del nuovo sito Web .

  5. Dopo aver creato il sito Web, fare clic sul collegamento nella colonna URL . Verificare che il nuovo sito Web funzioni.

    Esplorazione del nuovo sito Web Esplorazione

    Esplorazione del nuovo sito Web

    Sito Web che esegue il sito Web

    Sito Web in esecuzione

  6. Indietro al portale e fare clic sul nome del sito Web nella colonna Nome per visualizzare le pagine di gestione.

    Apertura delle pagine di gestione

    Apertura delle pagine di gestione siti Web

  7. Nella pagina Dashboard fare clic sul collegamento Download publish profile (Scarica profilo di pubblicazione).

    Nota

    Il profilo di pubblicazione contiene tutte le informazioni necessarie per pubblicare un'applicazione Web in un sito Web di Windows Azure per ogni metodo di pubblicazione abilitato. Nel profilo di pubblicazione sono contenuti gli URL, le credenziali utente e le stringhe di database necessari per la connessione e l'autenticazione in ognuno degli endpoint per cui è abilitato un metodo di pubblicazione. Microsoft WebMatrix 2, Microsoft Visual Studio Express per il Web e Microsoft Visual Studio 2012 supportano la lettura dei profili di pubblicazione per automatizzare la configurazione di questi programmi per la pubblicazione di applicazioni Web nei siti Web di Windows Azure.

    Download del profilo di pubblicazione del sito Web Download del

    Download del profilo di pubblicazione del sito Web

  8. Scaricare il file del profilo di pubblicazione in un percorso noto. In questo esercizio verrà illustrato come usare questo file per pubblicare un'applicazione Web in un sito Web di Windows Azure da Visual Studio.

    Salvataggio del file del profilo di

    Salvataggio del file del profilo di pubblicazione

Attività 2 - Configurazione del server di database

Se l'applicazione usa database SQL Server, è necessario creare un server di database SQL. Se si vuole distribuire un'applicazione semplice che non usa SQL Server è possibile ignorare questa attività.

  1. È necessario un server database SQL per archiviare il database dell'applicazione. È possibile visualizzare i server di database SQL dalla sottoscrizione nel portale di gestione di Windows Azure neldashboard diSql Database | Server | . Se non è stato creato un server, è possibile crearne uno usando il pulsante Aggiungi sulla barra dei comandi. Prendere nota del nome del server e dell'URL, del nome di accesso e della password dell'amministratore, come si userà nelle attività successive. Non creare ancora il database, perché verrà creato in una fase successiva.

    dashboard del server database SQL

    Dashboard del server database SQL

  2. Nell'attività successiva si testerà la connessione al database da Visual Studio, per questo motivo è necessario includere l'indirizzo IP locale nell'elenco degli indirizzi IP consentiti del server. A tale scopo, fare clic su Configura, selezionare l'indirizzo IP del client corrente e incollarlo nelle caselle di testo IndirizzoIP iniziale e Indirizzo IP finale e fare clic sul pulsante add-client-ip-address-ok-button.

    Aggiunta dell'indirizzo IP client

    Aggiunta dell'indirizzo IP client

  3. Dopo aver aggiunto l'indirizzo IP client all'elenco indirizzi IP consentiti, fare clic su Salva per confermare le modifiche.

    Confermare le modifiche

    Confermare le modifiche

Attività 3 - Pubblicazione di un'applicazione MVC 4 ASP.NET tramite distribuzione Web

  1. Indietro alla soluzione MVC 4 ASP.NET. Nella Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto del sito Web e scegliere Pubblica.

    Pubblicazione dell'applicazione

    Pubblicazione del sito Web

  2. Importare il profilo di pubblicazione salvato nella prima attività.

    Importazione del profilo di pubblicazione Importazione

    Importazione del profilo di pubblicazione

  3. Fare clic su Convalida connessione. Al termine della convalida, fare clic su Avanti.

    Nota

    La convalida viene completata dopo aver visualizzato un segno di spunta verde accanto al pulsante Convalida connessione.

    Convalida della connessione Convalida

    Convalida della connessione

  4. Nella pagina Impostazioni , nella sezione Database , fare clic sul pulsante accanto alla casella di testo della connessione al database, ad esempio DefaultConnection.

    Configurazione distribuzione Web Distribuzione Web

    Configurazione distribuzione Web

  5. Configurare la connessione al database come indicato di seguito:

    • In Nome server digitare l'URL del server database SQL usando il prefisso tcp: .

    • In Nome utente digitare il nome di accesso dell'amministratore del server.

    • In Password digitare la password di accesso dell'amministratore del server.

    • Digitare un nuovo nome di database.

      Configurazione della stringa di connessione di destinazione

      Configurazione della stringa di connessione di destinazione

  6. Fare quindi clic su OK. Quando viene richiesto di creare il database, fare clic su .

    Creazione del database Creazione

    Creazione del database

  7. La stringa di connessione che verrà usata per connettersi a database SQL in Windows Azure viene visualizzata nella casella di testo Connessione predefinita. Quindi fare clic su Avanti.

    Stringa di connessione che punta alla stringa database SQL

    Stringa di connessione che punta a database SQL

  8. Nella pagina Anteprima fare clic su Pubblica.

    Pubblicazione dell'applicazione Web Pubblicazione

    Pubblicazione dell'applicazione Web

  9. Al termine del processo di pubblicazione, il browser predefinito aprirà il sito Web pubblicato.

Appendice C: Uso di frammenti di codice

Con i frammenti di codice, tutto il codice necessario è a portata di mano. Il documento del lab indica esattamente quando è possibile usarli, come illustrato nella figura seguente.

Uso dei frammenti di codice di Visual Studio per inserire codice nel progetto

Uso dei frammenti di codice di Visual Studio per inserire codice nel progetto

Per aggiungere un frammento di codice usando la tastiera (solo C#)

  1. Posizionare il cursore in cui si vuole inserire il codice.
  2. Iniziare a digitare il nome del frammento (senza spazi o trattini).
  3. Osservare che IntelliSense visualizza i nomi dei frammenti di codice corrispondenti.
  4. Selezionare il frammento corretto o continuare a digitare finché non viene selezionato il nome dell'intero frammento.
  5. Premere tab due volte per inserire il frammento di codice nella posizione del cursore.

Iniziare a digitare il nome del frammento

Iniziare a digitare il nome del frammento di codice

Premere TAB per selezionare il frammento di codice evidenziato

Premere TAB per selezionare il frammento evidenziato

Premere di nuovo tabulazioni e il frammento di codice espanderà

Premere di nuovo TAB e il frammento verrà espanso

Per aggiungere un frammento di codice usando il mouse (C#, Visual Basic e XML) 1. Fare clic con il pulsante destro del mouse sul percorso in cui si vuole inserire il frammento di codice.

  1. Selezionare Inserisci frammento di codice seguito da Frammenti di codice personali.
  2. Selezionare il frammento di codice pertinente dall'elenco facendo clic su di esso.

Fare clic con il pulsante destro del mouse sul percorso in cui inserire il frammento di codice e scegliere Inserisci frammento di codice facendo

Fare clic con il pulsante destro del mouse su dove inserire il frammento di codice e selezionare Inserisci frammento

Selezionare il frammento di codice pertinente dall'elenco facendo clic su di

Selezionare il frammento di codice pertinente dall'elenco facendo clic su di esso