Acesso a dados e modelos do ASP.NET MVC 4
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
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:
- Microsoft Visual Studio Express 2012 para Web ou superior (leia o Apêndice A para obter instruções sobre como instalá-lo).
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:
- Exercício 1: Adicionando um banco de dados
- Exercício 2: Criando um banco de dados usando o Code First
- 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.
Abra a solução Begin localizada na pasta Source/Ex1-AddingADatabaseDBFirst/Begin/ .
Você precisará baixar alguns pacotes NuGet ausentes antes de continuar. Para fazer isso, clique no menu Projeto e selecione Gerenciar Pacotes NuGet.
Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.
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.
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
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 Gerenciador de Soluções
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
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.
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
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
Como você está gerando um modelo de um banco de dados, precisará especificar a conexão a ser usada. Clique em Nova Conexão.
Selecione Arquivo de Banco de Dados do Microsoft SQL Server e clique em Continuar.
Caixa de diálogo Escolher fonte de dados
Clique em Procurar e selecione o banco de dados MvcMusicStore.mdf localizado na pasta App_Data e clique em OK.
Propriedades da conexão
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
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
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.
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 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.
Crie o projeto selecionando o item de menu Compilar e, em seguida, Compilar MvcMusicStore.
Criando o projeto
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.
Builds bem-sucedidos
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
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.
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();
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.
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); }
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.
Recompile a solução e pressione F5 para executar o Aplicativo.
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.
Navegando gêneros do banco de dados
Agora, navegue até qualquer gênero e verifique se os álbuns são preenchidos 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.
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.
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.
Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.
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.
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 o código
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;
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.
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
<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.
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.
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; } } }
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; } } }
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 um novo item
Adicionando uma classe
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; ...
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.
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(); ... }
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.
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); }
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.
Recompile a solução e pressione F5 para executar o Aplicativo.
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.
Navegando gêneros do banco de dados
Agora, navegue até qualquer gênero e verifique 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.
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.
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.
Na caixa de diálogo Gerenciar Pacotes NuGet , clique em Restaurar para baixar pacotes ausentes.
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.
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.
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.
Pressione F5 para executar o Aplicativo.
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 /Store/Browse?genre=Pop
Tarefa 3 – Acessar álbuns por ID
Nesta tarefa, você repetirá o procedimento anterior para obter álbuns por sua ID.
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.
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.
Pressione F5 para executar o Aplicativo.
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.
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.
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".
Clique em Instalar Agora. Se você não tiver o Web Platform Installer , será redirecionado para baixá-lo e instalá-lo primeiro.
Depois que o Web Platform Installer estiver aberto, clique em Instalar para iniciar a instalação.
Instalar Visual Studio Express
Leia todas as licenças e termos dos produtos e clique em Aceito para continuar.
Aceitando os termos de licença
Aguarde até que o processo de download e instalação seja concluído.
Progresso da instalação
Quando a instalação for concluída, clique em Concluir.
Instalação concluída
Clique em Sair para fechar o Web Platform Installer.
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
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
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.
Fazer logon no Portal de Gerenciamento do Windows Azure
Clique em Novo na barra de comandos.
Criando um novo site
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
Aguarde até que o novo Site seja criado.
Depois que o Site for criado, clique no link na coluna URL . Verifique se o novo site está funcionando.
Navegando até o novo site
Site em execução
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
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
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.
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.
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
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
.
Adicionando endereço IP do cliente
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
Tarefa 3 – Publicar um aplicativo MVC 4 ASP.NET usando a Implantação da Web
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 site
Importe o perfil de publicação salvo na primeira tarefa.
Importando perfil de publicação
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
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).
da
Configuração de implantação da Web
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
Em seguida, clique em OK. Quando solicitado a criar o banco de dados, clique em Sim.
Criando o banco de dados
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 Banco de Dados SQL
Na página Visualização , clique em Publicar.
Publicando o aplicativo Web
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
Para adicionar um snippet de código usando o teclado (somente C#)
- Coloque o cursor onde você deseja inserir o código.
- Comece a digitar o nome do snippet (sem espaços ou hifens).
- Observe como o IntelliSense exibe os nomes dos snippets correspondentes.
- Selecione o snippet correto (ou continue digitando até que o nome do snippet inteiro seja selecionado).
- Pressione a tecla Tab duas vezes para inserir o snippet no local do cursor.
Comece a digitar o nome do snippet
Pressione Tab para selecionar o snippet realçado
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.
- Selecione Inserir Snippet seguido por Meus Snippets de Código.
- 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
Escolha o snippet relevante na lista clicando nele
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de