Acesso a dados e modelos do ASP.NET MVC 4

Por Equipe de Campos da Web

Baixar o Kit de Treinamento de Campos da Web

Este Laboratório Prático pressupõe que você tenha conhecimento básico de ASP.NET MVC. Se você não usou ASP.NET MVC antes, recomendamos que você acesse ASP.NET Laboratório Prático de Conceitos Básicos do MVC 4 .

Este laboratório orienta você pelos aprimoramentos e novos recursos descritos anteriormente aplicando pequenas alterações a um aplicativo Web de exemplo fornecido na pasta Origem.

Observação

Todos os snippets e código de exemplo estão incluídos no Kit de Treinamento de Campos da Web, disponível em Versões do Microsoft-Web/WebCampTrainingKit. O projeto específico para este laboratório está disponível em ASP.NET MVC 4 Models and Data Access.

Em ASP.NET Laboratório Prático de Conceitos Básicos do MVC , você tem passado dados embutidos em código dos Controladores para os modelos de Exibição. Mas, para criar um aplicativo Web real, talvez você queira usar um banco de dados real.

Este Laboratório Prático mostrará como usar um mecanismo de banco de dados para armazenar e recuperar os dados necessários para o aplicativo da Music Store. Para fazer isso, você começará com um banco de dados existente e criará o Modelo de Dados de Entidade com base nele. Ao longo deste laboratório, você atenderá à abordagem Database First , bem como à abordagem Code First .

No entanto, você também pode usar a abordagem Model First , criar o mesmo modelo usando as ferramentas e, em seguida, gerar o banco de dados a partir dele.

Database First vs. Model First

Database First vs. Model First

Depois de gerar o Modelo, você fará os ajustes adequados no StoreController para fornecer às Exibições do Repositório os dados obtidos do banco de dados, em vez de usar dados embutidos em código. Você não precisará fazer nenhuma alteração nos modelos de Exibição porque o StoreController retornará os mesmos ViewModels para os modelos de Exibição, embora desta vez os dados venham do banco de dados.

A abordagem code first

A abordagem Code First nos permite definir o modelo do código sem gerar classes geralmente associadas à estrutura.

No código primeiro, os objetos de modelo são definidos com POCOs, "Plain Old CLR Objects". POCOs são classes simples e simples que não têm herança e não implementam interfaces. Podemos gerar automaticamente o banco de dados com base neles ou podemos usar um banco de dados existente e gerar o mapeamento de classe a partir do código.

Os benefícios de usar essa abordagem é que o Modelo permanece independente da estrutura de persistência (nesse caso, o Entity Framework), pois as classes POCOs não são acopladas à estrutura de mapeamento.

Observação

Este Laboratório baseia-se no ASP.NET MVC 4 e em uma versão do aplicativo de exemplo da Music Store personalizada e minimizada para se ajustar apenas aos recursos mostrados neste Hands-On Lab.

Se você quiser explorar todo o aplicativo de tutorial da Music Store , poderá encontrá-lo na MVC-Music-Store.

Pré-requisitos

Você deve ter os seguintes itens para concluir este laboratório:

Instalação

Instalando snippets de código

Para sua conveniência, grande parte do código que você gerenciará ao longo deste laboratório está disponível como snippets de código do Visual Studio. Para instalar os snippets de código, execute o arquivo .\Source\Setup\CodeSnippets.vsi .

Se você não estiver familiarizado com os snippets de Visual Studio Code e quiser aprender a usá-los, consulte o apêndice deste documento "Apêndice C: Usando Snippets de Código".


Exercícios

Este Laboratório Prático é composto pelos seguintes exercícios:

  1. Exercício 1: Adicionando um banco de dados
  2. Exercício 2: Criando um banco de dados usando o Code First
  3. Exercício 3: Consultar o banco de dados com parâmetros

Observação

Cada exercício é acompanhado por uma pasta End que contém a solução resultante que você deve obter depois de concluir os exercícios. Você pode usar essa solução como um guia se precisar de ajuda adicional para trabalhar nos exercícios.

Tempo estimado para concluir este laboratório: 35 minutos.

Exercício 1: Adicionando um banco de dados

Neste exercício, você aprenderá a adicionar um banco de dados com as tabelas do aplicativo MusicStore à solução para consumir seus dados. Depois que o banco de dados for gerado com o modelo e adicionado à solução, você modificará a classe StoreController para fornecer ao modelo De exibição os dados obtidos do banco de dados, em vez de usar valores embutidos em código.

Tarefa 1 – Adicionar um banco de dados

Nesta tarefa, você adicionará um banco de dados já criado com as tabelas main do aplicativo MusicStore à solução.

  1. Abra a solução Begin localizada na pasta Source/Ex1-AddingADatabaseDBFirst/Begin/ .

    1. Você precisará baixar alguns pacotes NuGet ausentes antes de continuar. Para fazer isso, clique no menu Projeto e selecione Gerenciar Pacotes NuGet.

    2. Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.

    3. Por fim, crie a solução clicando em Compilar | Compilar Solução.

      Observação

      Uma das vantagens de usar o NuGet é que você não precisa enviar todas as bibliotecas em seu projeto, reduzindo o tamanho do projeto. Com o NuGet Power Tools, especificando as versões do pacote no arquivo Packages.config, você poderá baixar todas as bibliotecas necessárias na primeira vez que executar o projeto. É por isso que você precisará executar essas etapas depois de abrir uma solução existente neste laboratório.

  2. Adicione o arquivo de banco de dados MvcMusicStore . Neste Laboratório Prático, você usará um banco de dados já criado chamado MvcMusicStore.mdf. Para fazer isso, clique com o botão direito do mouse em App_Data pasta, aponte para Adicionar e clique em Item Existente. Navegue até \Source\Assets e selecione o arquivo MvcMusicStore.mdf .

    Adicionando um item existente

    Adicionando um item existente

    Arquivo de banco de dados MvcMusicStore.mdf

    Arquivo de banco de dados MvcMusicStore.mdf

    O banco de dados foi adicionado ao projeto. Mesmo quando o banco de dados está localizado dentro da solução, você pode consultá-lo e atualizá-lo como ele foi hospedado em um servidor de banco de dados diferente.

    Banco de dados MvcMusicStore no banco de dados Gerenciador de Soluções

    Banco de dados MvcMusicStore no Gerenciador de Soluções

  3. Verifique a conexão com o banco de dados. Para fazer isso, clique duas vezes em MvcMusicStore.mdf para estabelecer uma conexão.

    Conectando-se ao MvcMusicStore.mdf

    Conectando-se ao MvcMusicStore.mdf

Tarefa 2 – Criar um modelo de dados

Nesta tarefa, você criará um modelo de dados para interagir com o banco de dados adicionado na tarefa anterior.

  1. Crie um modelo de dados que representará o banco de dados. Para fazer isso, em Gerenciador de Soluções clique com o botão direito do mouse na pasta Modelos, aponte para Adicionar e clique em Novo Item. Na caixa de diálogo Adicionar Novo Item , selecione o modelo Dados e, em seguida, o item Modelo de Dados de Entidade ADO.NET . Altere o nome do modelo de dados para StoreDB.edmx e clique em Adicionar.

    Adicionando o modelo de dados de entidade ADO.NET StoreDB

    Adicionando o modelo de dados de entidade ADO.NET StoreDB

  2. O Assistente de Modelo de Dados de Entidade será exibido. Este assistente orientará você na criação da camada de modelo. Como o modelo deve ser criado com base no banco de dados existente adicionado recentemente, selecione Gerar do banco de dados e clique em Avançar.

    Escolhendo o conteúdo do modelo

    Escolhendo o conteúdo do modelo

  3. Como você está gerando um modelo de um banco de dados, precisará especificar a conexão a ser usada. Clique em Nova Conexão.

  4. Selecione Arquivo de Banco de Dados do Microsoft SQL Server e clique em Continuar.

    Escolher fonte de dados

    Caixa de diálogo Escolher fonte de dados

  5. Clique em Procurar e selecione o banco de dados MvcMusicStore.mdf localizado na pasta App_Data e clique em OK.

    Propriedades de conexão

    Propriedades da conexão

  6. A classe gerada deve ter o mesmo nome que a cadeia de conexão de entidade, portanto, altere seu nome para MusicStoreEntities e clique em Avançar.

    Escolhendo a conexão de dados

    Escolhendo a conexão de dados

  7. Escolha os objetos de banco de dados a serem usados. Como o Modelo de Entidade usará apenas as tabelas do banco de dados, selecione a opção Tabelas e verifique se as opções Incluir colunas de chave estrangeira no modelo e Pluralizar ou singularizar as opções de nomes de objeto gerados também estão selecionadas. Altere o Namespace do Modelo para MvcMusicStore.Model e clique em Concluir.

    Escolhendo os objetos de banco de dados

    Escolhendo os objetos de banco de dados

    Observação

    Se uma caixa de diálogo Aviso de Segurança for mostrada, clique em OK para executar o modelo e gerar as classes para as entidades de modelo.

  8. Um diagrama de entidade para o banco de dados será exibido, enquanto uma classe separada que mapeia cada tabela para o banco de dados será criada. Por exemplo, a tabela Álbuns será representada por uma classe Album , em que cada coluna na tabela será mapeada para uma propriedade de classe. Isso permitirá que você consulte e trabalhe com objetos que representam linhas no banco de dados.

    Diagrama de

    Diagrama de entidade

    Observação

    Os modelos T4 (.tt) executam código para gerar as classes de entidades e substituirão as classes existentes com o mesmo nome. Neste exemplo, as classes "Album", "Genre" e "Artist" foram substituídas pelo código gerado.

Tarefa 3 – Criando o aplicativo

Nesta tarefa, você marcar que, embora a geração do modelo tenha removido as classes de modelo Álbum, Gênero e Artista, o projeto é compilado com êxito usando as novas classes de modelo de dados.

  1. Crie o projeto selecionando o item de menu Compilar e, em seguida, Compilar MvcMusicStore.

    Criando o projeto

    Criando o projeto

  2. O projeto é compilado com êxito. Por que ainda funciona? Ele funciona porque as tabelas de banco de dados têm campos que incluem as propriedades que você estava usando nas classes removidas Álbum e Gênero.

    Compila compilações bem-sucedidas

    Builds bem-sucedidos

  3. Embora o designer exiba as entidades em um formato de diagrama, elas são realmente classes C#. Expanda o nó StoreDB.edmx no Gerenciador de Soluções e, em seguida, StoreDB.tt, você verá as novas entidades geradas.

    Arquivos gerados

    Arquivos gerados

Tarefa 4 – Consultando o banco de dados

Nesta tarefa, você atualizará a classe StoreController para que, em vez de usar dados codificados, consulte o banco de dados para recuperar as informações.

  1. Abra Controllers\StoreController.cs e adicione o seguinte campo à classe para manter uma instância da classe MusicStoreEntities , chamada storeDB:

    (Snippet de código – Modelos e acesso a dados – Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
    
  2. A classe MusicStoreEntities expõe uma propriedade de coleção para cada tabela no banco de dados. Atualize o método de ação Procurar para recuperar um Gênero com todos os Álbuns.

    (Snippet de código – Modelos e acesso a dados – Ex1 Store Browse)

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

    Observação

    Você está usando uma funcionalidade do .NET chamada LINQ (consulta integrada à linguagem) para gravar expressões de consulta fortemente tipada nessas coleções , que executarão código no banco de dados e retornarão objetos com os quais você pode programar.

    Para obter mais informações sobre LINQ, visite o site msdn.

  3. Atualize o método de ação Index para recuperar todos os gêneros.

    (Snippet de código – Modelos e acesso a dados – Índice do Repositório Ex1)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Atualize o método de ação Index para recuperar todos os gêneros e transformar a coleção em uma lista.

    (Snippet de código – Modelos e acesso a dados – Ex1 Store GenreMenu)

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

Tarefa 5 – Executando o aplicativo

Nesta tarefa, você marcar que a página Índice da Loja agora exibirá os Gêneros armazenados no banco de dados em vez dos codificados. Não é necessário alterar o modelo de Exibição porque o StoreController está retornando as mesmas entidades de antes, embora desta vez os dados venham do banco de dados.

  1. Recompile a solução e pressione F5 para executar o Aplicativo.

  2. O projeto começa na Página Inicial. Verifique se o menu de Gêneros não é mais uma lista codificada e se os dados são recuperados diretamente do banco de dados.

    A captura de tela mostra uma página de gênero musical em que você pode verificar o menu Gêneros.

    Navegando gêneros do banco de dados

  3. Agora, navegue até qualquer gênero e verifique se os álbuns são preenchidos do banco de dados.

    A captura de tela mostra uma exibição em que você pode procurar álbuns do banco de dados.

    Navegando por álbuns do banco de dados

Exercício 2: Criando um banco de dados usando o código primeiro

Neste exercício, você aprenderá a usar a abordagem Code First para criar um banco de dados com as tabelas do aplicativo MusicStore e como acessar seus dados.

Depois que o modelo for gerado, você modificará o StoreController para fornecer ao modelo De exibição os dados obtidos do banco de dados, em vez de usar valores codificados.

Observação

Se você concluiu o Exercício 1 e já trabalhou com a abordagem Database First, agora aprenderá a obter os mesmos resultados com um processo diferente. As tarefas em comum com o Exercício 1 foram marcadas para facilitar a leitura. Se você ainda não concluiu o Exercício 1, mas deseja aprender a abordagem Code First, comece neste exercício e obtenha uma cobertura completa do tópico.

Tarefa 1 – Preencher dados de exemplo

Nesta tarefa, você preencherá o banco de dados com dados de exemplo quando ele for criado inicialmente usando Code-First.

  1. Abra a solução Begin localizada na pasta Source/Ex2-CreatingADatabaseCodeFirst/Begin/ . Caso contrário, você poderá continuar usando a solução End obtida concluindo o exercício anterior.

    1. Se você abriu a solução Begin fornecida, precisará baixar alguns pacotes NuGet ausentes antes de continuar. Para fazer isso, clique no menu Projeto e selecione Gerenciar Pacotes NuGet.

    2. Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.

    3. Por fim, crie a solução clicando em Compilar | solução de build.

      Observação

      Uma das vantagens de usar o NuGet é que você não precisa enviar todas as bibliotecas em seu projeto, reduzindo o tamanho do projeto. Com o NuGet Power Tools, especificando as versões do pacote no arquivo Packages.config, você poderá baixar todas as bibliotecas necessárias na primeira vez que executar o projeto. É por isso que você precisará executar essas etapas depois de abrir uma solução existente deste laboratório.

  2. Adicione o arquivo SampleData.cs à pasta Modelos . Para fazer isso, clique com o botão direito do mouse na pasta Modelos , aponte para Adicionar e clique em Item Existente. Navegue até \Source\Assets e selecione o arquivo SampleData.cs .

    Exemplo de dados que preenchem código

    Exemplo de dados que preenchem o código

  3. Abra o arquivo Global.asax.cs e adicione as instruções using a seguir.

    (Snippet de código – Modelos e acesso a dados – Usos de Asax Globais ex2)

    using MvcMusicStore.Models;
    using System.Data.Entity;
    
  4. No método Application_Start() adicione a linha a seguir para definir o inicializador de banco de dados.

    (Snippet de código – Modelos e acesso a dados – 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());
    }
    

Tarefa 2 – Configurar a conexão com o banco de dados

Agora que você já adicionou um banco de dados ao nosso projeto, escreverá no arquivoWeb.config a cadeia de conexão.

  1. Adicione uma cadeia de conexão em Web.config. Para fazer isso, abra Web.config na raiz do projeto e substitua a cadeia de conexão chamada DefaultConnection por essa linha na <seção connectionStrings> :

    Web.config local do arquivo

    Web.config local do arquivo

    <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>
    ...
    

Tarefa 3 – Trabalhar com o modelo

Agora que você já configurou a conexão com o banco de dados, vinculará o modelo às tabelas de banco de dados. Nesta tarefa, você criará uma classe que será vinculada ao banco de dados com o Code First. Lembre-se de que há uma classe de modelo POCO existente que deve ser modificada.

Observação

Se você concluiu o Exercício 1, observará que esta etapa foi executada por um assistente. Ao fazer o Code First, você criará manualmente classes que serão vinculadas a entidades de dados.

  1. Abra a pasta de projeto Gênero da classe de modelo POCO de Modelos e inclua uma ID. Use uma propriedade int com o nome GenreId.

    (Snippet de código - Modelos e acesso a dados - Ex2 Code First Genre)

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

    Observação

    Para trabalhar com convenções do Code First, a classe Gênero deve ter uma propriedade de chave primária que será detectada automaticamente.

    Você pode ler mais sobre as Convenções do Code First neste artigo msdn.

  2. Agora, abra a pasta de projeto Álbum da classe de modelo POCO de Modelos e inclua as chaves estrangeiras, crie propriedades com os nomes GenreId e ArtistId. Essa classe já tem a GenreId para a chave primária.

    (Snippet de código - Modelos e Acesso a Dados - 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. Abra a classe de modelo POCO Artist e inclua a propriedade ArtistId .

    (Snippet de código - Modelos e acesso a dados - Ex2 Code First Artist)

    namespace MvcMusicStore.Models
    {
        public class Artist
        {
            public int ArtistId { get; set; }
    
            public string Name { get; set; }
        }
    }
    
  4. Clique com o botão direito do mouse na pasta do projeto Modelos e selecione Adicionar | Classe. Nomeie o arquivo MusicStoreEntities.cs. Em seguida, clique em Adicionar.

    Adicionando uma classe

    Adicionando um novo item

    Adicionando uma classe2

    Adicionando uma classe

  5. Abra a classe que você acabou de criar, MusicStoreEntities.cs, e inclua os namespaces 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. Substitua a declaração de classe para estender a classe DbContext : declare um DBSet público e substitua o método OnModelCreating . Após esta etapa, você obterá uma classe de domínio que vinculará seu modelo ao Entity Framework. Para fazer isso, substitua o código de classe pelo seguinte:

    (Snippet de código – Modelos e acesso a dados – 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);
            }
        }
    }
    

Observação

Com Entity Framework DbContext e DBSet , você poderá consultar a classe POCO Genre. Ao estender o método OnModelCreating , você está especificando no código como Gênero será mapeado para uma tabela de banco de dados. Você pode encontrar mais informações sobre DBContext e DBSet neste artigo msdn: link

Tarefa 4 – Consultando o banco de dados

Nesta tarefa, você atualizará a classe StoreController para que, em vez de usar dados codificados, ela a recupere do banco de dados.

Observação

Essa tarefa é comum com o Exercício 1.

Se você concluiu o Exercício 1, observará que essas etapas são as mesmas em ambas as abordagens (banco de dados primeiro ou Código primeiro). Eles são diferentes em como os dados são vinculados ao modelo, mas o acesso a entidades de dados ainda é transparente do controlador.

  1. Abra Controllers\StoreController.cs e adicione o seguinte campo à classe para manter uma instância da classe MusicStoreEntities , chamada storeDB:

    (Snippet de código – Modelos e acesso a dados – Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
        ...
    }
    
  2. A classe MusicStoreEntities expõe uma propriedade de coleção para cada tabela no banco de dados. Atualize o método de ação Procurar para recuperar um Gênero com todos os Álbuns.

    (Snippet de código – Modelos e acesso a dados – Ex2 Store Browse)

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

    Observação

    Você está usando uma funcionalidade do .NET chamada LINQ (consulta integrada à linguagem) para gravar expressões de consulta fortemente tipada nessas coleções , que executarão código no banco de dados e retornarão objetos com os quais você pode programar.

    Para obter mais informações sobre LINQ, visite o site msdn.

  3. Atualize o método de ação Index para recuperar todos os gêneros.

    (Snippet de código – Modelos e acesso a dados – Índice do Repositório Ex2)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Atualize o método de ação Index para recuperar todos os gêneros e transformar a coleção em uma lista.

    (Snippet de código – Modelos e acesso a dados – Ex2 Store GenreMenu)

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

Tarefa 5 – Executando o aplicativo

Nesta tarefa, você marcar que a página Índice da Loja agora exibirá os Gêneros armazenados no banco de dados em vez dos codificados. Não é necessário alterar o modelo de Exibição porque o StoreController está retornando o mesmo StoreIndexViewModel que antes, mas desta vez os dados virão do banco de dados.

  1. Recompile a solução e pressione F5 para executar o Aplicativo.

  2. O projeto começa na Página Inicial. Verifique se o menu de Gêneros não é mais uma lista codificada e se os dados são recuperados diretamente do banco de dados.

    A captura de tela mostra uma página de gênero musical em que você pode verificar se o menu Gêneros foi recuperado do banco de dados.

    Navegando gêneros do banco de dados

  3. Agora, navegue até qualquer gênero e verifique se os álbuns são preenchidos do banco de dados.

    A captura de tela mostra uma exibição em que você verifica se os álbuns são preenchidos do banco de dados.

    Navegando por álbuns do banco de dados

Exercício 3: Consultando o banco de dados com parâmetros

Neste exercício, você aprenderá a consultar o banco de dados usando parâmetros e como usar a Formatação de Resultados de Consulta, um recurso que reduz o número de acessos de banco de dados recuperando dados de maneira mais eficiente.

Observação

Para obter mais informações sobre a Formatação de Resultados da Consulta, visite o artigo msdn a seguir.

Tarefa 1 – Modificar StoreController para recuperar álbuns do banco de dados

Nesta tarefa, você alterará a classe StoreController para acessar o banco de dados para recuperar álbuns de um gênero específico.

  1. Abra a solução Begin localizada na pasta Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin se quiser usar Code-First abordagem ou a pasta Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin se quiser usar Database-First abordagem. Caso contrário, você poderá continuar usando a solução End obtida concluindo o exercício anterior.

    1. Se você abriu a solução Begin fornecida, precisará baixar alguns pacotes NuGet ausentes antes de continuar. Para fazer isso, clique no menu Projeto e selecione Gerenciar Pacotes NuGet.

    2. Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.

    3. Por fim, crie a solução clicando em Compilar | solução de build.

      Observação

      Uma das vantagens de usar o NuGet é que você não precisa enviar todas as bibliotecas em seu projeto, reduzindo o tamanho do projeto. Com o NuGet Power Tools, especificando as versões do pacote no arquivo Packages.config, você poderá baixar todas as bibliotecas necessárias na primeira vez que executar o projeto. É por isso que você precisará executar essas etapas depois de abrir uma solução existente deste laboratório.

  2. Abra a classe StoreController para alterar o método de ação Procurar . Para fazer isso, no Gerenciador de Soluções, expanda a pasta Controladores e clique duas vezes em StoreController.cs.

  3. Altere o método de ação Procurar para recuperar álbuns de um gênero específico. Para fazer isso, substitua o seguinte código:

    (Snippet de código – Modelos e acesso a dados – 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);
    }
    

Observação

Para preencher uma coleção da entidade, você precisa usar o método Include para especificar que deseja recuperar os álbuns também. Você pode usar o . Extensão single() no LINQ porque, nesse caso, apenas um gênero é esperado para um álbum. O método Single() usa uma expressão Lambda como um parâmetro, que, nesse caso, especifica um único objeto Genre de modo que seu nome corresponda ao valor definido.

Você aproveitará um recurso que permite indicar outras entidades relacionadas que deseja carregar também quando o objeto Genre for recuperado. Esse recurso é chamado de Formatação de Resultados de Consulta e permite que você reduza o número de vezes necessário para acessar o banco de dados para recuperar informações. Nesse cenário, você desejará buscar previamente os Álbuns para o Gênero recuperado.

A consulta inclui Genres.Include("Albums") para indicar que você também deseja álbuns relacionados. Isso resultará em um aplicativo mais eficiente, pois recuperará dados de Gênero e Álbum em uma única solicitação de banco de dados.

Tarefa 2 – Executando o aplicativo

Nesta tarefa, você executará o aplicativo e recuperará álbuns de um gênero específico do banco de dados.

  1. Pressione F5 para executar o Aplicativo.

  2. O projeto começa na Página Inicial. Altere a URL para /Store/Browse?genre=Pop para verificar se os resultados estão sendo recuperados do banco de dados.

    Navegação por gênero

    Navegação /Store/Browse?genre=Pop

Tarefa 3 – Acessar álbuns por ID

Nesta tarefa, você repetirá o procedimento anterior para obter álbuns por sua ID.

  1. Feche o navegador, se necessário, para retornar ao Visual Studio. Abra a classe StoreController para alterar o método de ação Detalhes . Para fazer isso, no Gerenciador de Soluções, expanda a pasta Controladores e clique duas vezes em StoreController.cs.

  2. Altere o método de ação Detalhes para recuperar os detalhes dos álbuns com base em sua ID. Para fazer isso, substitua o seguinte código:

    (Snippet de código – Modelos e acesso a dados – Detalhes do StoreController ex3Method)

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

Tarefa 4 – Executando o aplicativo

Nesta tarefa, você executará o Aplicativo em um navegador da Web e obterá detalhes do álbum por sua ID.

  1. Pressione F5 para executar o Aplicativo.

  2. O projeto começa na Página Inicial. Altere a URL para /Store/Details/51 ou navegue pelos gêneros e selecione um álbum para verificar se os resultados estão sendo recuperados do banco de dados.

    Detalhes de Navegação Detalhes

    Navegação /Store/Details/51

Observação

Além disso, você pode implantar esse aplicativo em Sites do Windows Azure seguindo o Apêndice B: Publicando um aplicativo ASP.NET MVC 4 usando a Implantação da Web.


Resumo

Ao concluir este Laboratório Prático, você aprendeu os conceitos básicos de ASP.NET modelos MVC e acesso a dados, usando a abordagem Database First , bem como a Abordagem code first :

  • Como adicionar um banco de dados à solução para consumir seus dados
  • Como atualizar controladores para fornecer modelos de exibição com os dados obtidos do banco de dados em vez de um embutido em código
  • Como consultar o banco de dados usando parâmetros
  • Como usar a Formatação de Resultados da Consulta, um recurso que reduz o número de acessos ao banco de dados, recuperando dados de maneira mais eficiente
  • Como usar as abordagens Database First e Code First no Microsoft Entity Framework para vincular o banco de dados ao modelo

Apêndice A: Instalando o Visual Studio Express 2012 para Web

Você pode instalar Microsoft Visual Studio Express 2012 para Web ou outra versão "Express" usando o Microsoft Web Platform Installer. As instruções a seguir orientam você pelas etapas necessárias para instalar o Visual Studio Express 2012 para Web usando Microsoft Web Platform Installer.

  1. Vá para [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169). Como alternativa, se você já tiver instalado o Web Platform Installer, poderá abri-lo e pesquisar o produto "Visual Studio Express 2012 para Web com o SDK do Windows Azure".

  2. Clique em Instalar Agora. Se você não tiver o Web Platform Installer , será redirecionado para baixá-lo e instalá-lo primeiro.

  3. Depois que o Web Platform Installer estiver aberto, clique em Instalar para iniciar a instalação.

    Instalar Visual Studio Express

    Instalar Visual Studio Express

  4. Leia todas as licenças e termos dos produtos e clique em Aceito para continuar.

    Aceitando os termos de licença

    Aceitando os termos de licença

  5. Aguarde até que o processo de download e instalação seja concluído.

    Progresso da instalação

    Progresso da instalação

  6. Quando a instalação for concluída, clique em Concluir.

    Instalação concluída

    Instalação concluída

  7. Clique em Sair para fechar o Web Platform Installer.

  8. Para abrir Visual Studio Express para Web, vá para a tela Inicial e comece a escrever "VS Express" e clique no bloco DO VS Express para Web.

    Bloco do VS Express para Web

    Bloco do VS Express para Web

Apêndice B: Publicando um aplicativo ASP.NET MVC 4 usando a Implantação da Web

Este apêndice mostrará como criar um novo site do Portal de Gerenciamento do Windows Azure e publicar o aplicativo obtido seguindo o laboratório, aproveitando o recurso de publicação implantação da Web fornecido pelo Windows Azure.

Tarefa 1 – Criar um novo site do Portal do Windows Azure

  1. Acesse o Portal de Gerenciamento do Windows Azure e entre usando as credenciais da Microsoft associadas à sua assinatura.

    Observação

    Com o Windows Azure, você pode hospedar 10 sites ASP.NET gratuitamente e, em seguida, dimensionar à medida que o tráfego cresce. Você pode se inscrever aqui.

    Faça logon no Windows portal do Azure

    Fazer logon no Portal de Gerenciamento do Windows Azure

  2. Clique em Novo na barra de comandos.

    Criando um novo site

    Criando um novo site

  3. Clique em Site de Computação | . Em seguida, selecione a opção Criação Rápida . Forneça uma URL disponível para o novo site e clique em Criar Site.

    Observação

    Um Site do Windows Azure é o host de um aplicativo Web em execução na nuvem que você pode controlar e gerenciar. A opção Criação Rápida permite implantar um aplicativo Web concluído no Site do Windows Azure de fora do portal. Ele não inclui etapas para configurar um banco de dados.

    Criando um novo site usando a Criação Rápida

    Criando um novo site usando a Criação Rápida

  4. Aguarde até que o novo Site seja criado.

  5. Depois que o Site for criado, clique no link na coluna URL . Verifique se o novo site está funcionando.

    Navegando até o novo site

    Navegando até o novo site

    Site executando

    Site em execução

  6. Voltar ao portal e clique no nome do site na coluna Nome para exibir as páginas de gerenciamento.

    Abrindo as páginas de gerenciamento de site

    Abrindo as páginas de gerenciamento de site

  7. Na página Painel , na seção de visão rápida , clique no link Baixar perfil de publicação .

    Observação

    O perfil de publicação contém todas as informações necessárias para publicar um aplicativo Web em um site do Windows Azure para cada método de publicação habilitado. O perfil de publicação contém as URLs, as credenciais de usuário e as cadeias de conexão de banco de dados necessárias para conectar-se e autenticar cada um dos pontos de extremidade para os quais um método de publicação é habilitado. O Microsoft WebMatrix 2, Microsoft Visual Studio Express para Web e o Microsoft Visual Studio 2012 dão suporte à leitura de perfis de publicação para automatizar a configuração desses programas para publicar aplicativos Web em sites do Windows Azure.

    Baixando o perfil de publicação do site

    Baixando o perfil de publicação do site

  8. Baixe o arquivo de perfil de publicação em um local conhecido. Além disso, neste exercício, você verá como usar esse arquivo para publicar um aplicativo Web em sites do Windows Azure do Visual Studio.

    Salvando o arquivo de perfil de

    Salvando o arquivo de perfil de publicação

Tarefa 2 – Configurando o servidor de banco de dados

Se o aplicativo usar SQL Server bancos de dados, você precisará criar um servidor Banco de Dados SQL. Se você quiser implantar um aplicativo simples que não usa SQL Server poderá ignorar essa tarefa.

  1. Você precisará de um servidor Banco de Dados SQL para armazenar o banco de dados do aplicativo. Você pode exibir os servidores Banco de Dados SQL de sua assinatura no portal de Gerenciamento do Windows Azure emPainel do SqlDatabases | Servers | Server. Se você não tiver um servidor criado, poderá criar um usando o botão Adicionar na barra de comandos. Anote o nome do servidor e a URL, o nome de logon do administrador e a senha, pois você os usará nas próximas tarefas. Ainda não crie o banco de dados, pois ele será criado em um estágio posterior.

    Painel do Servidor Banco de Dados SQL

    Painel do servidor Banco de Dados SQL

  2. Na próxima tarefa, você testará a conexão de banco de dados do Visual Studio, por esse motivo, precisará incluir seu endereço IP local na lista de endereços IP permitidos do servidor. Para fazer isso, clique em Configurar, selecione o endereço IP do Endereço IP do Cliente Atual e cole-o nas caixas de texto Endereço IP inicial e Endereço IP Final e clique no botão adicionar-cliente-ip-address-ok-button .

    Adicionando endereço IP do cliente

    Adicionando endereço IP do cliente

  3. Depois que o endereço IP do cliente for adicionado à lista de endereços IP permitidos, clique em Salvar para confirmar as alterações.

    Confirmar Alterações

    Confirmar Alterações

Tarefa 3 – Publicar um aplicativo MVC 4 ASP.NET usando a Implantação da Web

  1. Voltar à solução ASP.NET MVC 4. Na Gerenciador de Soluções, clique com o botão direito do mouse no projeto do site e selecione Publicar.

    Publicando o aplicativo

    Publicando o site

  2. Importe o perfil de publicação salvo na primeira tarefa.

    Importando o perfil de publicação

    Importando perfil de publicação

  3. Clique em Validar Conexão. Depois que a validação for concluída, clique em Avançar.

    Observação

    A validação é concluída quando você vê uma marca de seleção verde aparecer ao lado do botão Validar Conexão.

    Validando a conexão

    Validando a conexão

  4. Na página Configurações , na seção Bancos de dados, clique no botão ao lado da caixa de texto da conexão de banco de dados (ou seja, DefaultConnection).

    Configuração de implantação da

    Configuração de implantação da Web

  5. Configure a conexão de banco de dados da seguinte maneira:

    • No Nome do servidor, digite a URL do servidor Banco de Dados SQL usando o prefixo tcp: .

    • Em Nome de usuário, digite o nome de logon do administrador do servidor.

    • Em Senha, digite a senha de logon do administrador do servidor.

    • Digite um novo nome de banco de dados.

      Configurando a cadeia de conexão de destino

      Configurando a cadeia de conexão de destino

  6. Em seguida, clique em OK. Quando solicitado a criar o banco de dados, clique em Sim.

    Criando o banco de dados

    Criando o banco de dados

  7. A cadeia de conexão que você usará para se conectar a Banco de Dados SQL no Windows Azure é mostrada na caixa de texto Conexão Padrão. Em seguida, clique em Próximo.

    Cadeia de conexão apontando para a cadeia de caracteres Banco de Dados SQL

    Cadeia de conexão apontando para Banco de Dados SQL

  8. Na página Visualização , clique em Publicar.

    Publicando o aplicativo Web

    Publicando o aplicativo Web

  9. Depois que o processo de publicação for concluído, o navegador padrão abrirá o site publicado.

Apêndice C: usando snippets de código

Com snippets de código, você tem todo o código necessário ao seu alcance. O documento de laboratório informará exatamente quando você pode usá-los, conforme mostrado na figura a seguir.

Usando snippets de código do Visual Studio para inserir código em seu projeto

Usando snippets de código do Visual Studio para inserir código em seu projeto

Para adicionar um snippet de código usando o teclado (somente C#)

  1. Coloque o cursor onde você deseja inserir o código.
  2. Comece a digitar o nome do snippet (sem espaços ou hifens).
  3. Observe como o IntelliSense exibe os nomes dos snippets correspondentes.
  4. Selecione o snippet correto (ou continue digitando até que o nome do snippet inteiro seja selecionado).
  5. Pressione a tecla Tab duas vezes para inserir o snippet no local do cursor.

Comece a digitar o nome do snippet

Comece a digitar o nome do snippet

Pressione Tab para selecionar o snippet de código realçado

Pressione Tab para selecionar o snippet realçado

Pressione Tab novamente e o snippet expandirá

Pressione Tab novamente e o snippet se expandirá

Para adicionar um snippet de código usando o mouse (C#, Visual Basic e XML) 1. Clique com o botão direito do mouse no local em que você deseja inserir o snippet de código.

  1. Selecione Inserir Snippet seguido por Meus Snippets de Código.
  2. Escolha o snippet relevante na lista clicando nele.

Clique com o botão direito do mouse onde você deseja inserir o snippet de código e selecione Inserir Snippet

Clique com o botão direito do mouse onde você deseja inserir o snippet de código e selecione Inserir Snippet

Escolha o snippet relevante da lista clicando nele

Escolha o snippet relevante na lista clicando nele