ASP .NET Core - Criando uma aplicação ASP .NET Core MVC com o VS 2017 - V

 Neste artigo eu vou mostrar como criar uma aplicação ASP .NET Core MVC usando o VS 2017.

Continuando a quarta parte do artigo vamos entender como funciona a configuração e o acesso ao banco de dados SQL Server Local DB usado no projeto.

Nós já vimos que o contexto do banco de dados Filme - MvcFilmeContext - é adicionado ao contâiner de injeção de dependência nativa da ASP .NET Core no arquivo Startup.cs.

      ....
    // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.AddDbContext<MvcFilmeContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("MvcFilmeContext")));
        }
    ....

O objeto MvcFilmeContext manipula a tarefa de se conectar com o banco de dados e mapear os objetos Filme para os registros do banco de dados.

O sistema de configuração ASP.NET Core lê a ConnectionString, sendo que , para desenvolvimento local, ele obtém a string de conexão do arquivo appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "MvcFilmeContext": "Server=(localdb)\\mssqllocaldb;Database=MvcFilmeContext-af418162-dae9-452f-a5a1-6d6e066cfacc;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

Quando você implanta o aplicativo em um servidor de teste ou de produção, você pode usar uma variável de ambiente ou outra abordagem para definir a string de conexão para um SQL Server real.

Conhecendo o SQL Server Express LocalDB

O SQL Server LocalDB é uma versão mais leve do SQL Server Express Engine sendo iniciado sob demanda e executado em modo user, dessa forma sua configuração não é complexa. Por padrão o banco de dados LocalDB cria arquivos .mdf na pasta C:/Users/<user>.

Vamos dar uma espiada no banco de dados MvcFilmeContext e na tabela Filme criados para a nossa aplicação.

No menu View clique em SQL Server Object Explorer :

A seguir expanda o banco de dados MvcFilmeContext;

Clique com o botão direito do mouse sobre a tabela Filme e a seguir clique em View Designer:

Abaixo vemos a estrutura da tabela Filme que foi criada contendo os campos : ID, Genero, Lancamento, Preco e Titulo , que correspondem às propriedades que definimos na classe Filme, o nosso modelo.

Observe que o campo ID foi definido como uma chave primária e do tipo Identity, e assim, é um campo autoincremental controlado pelo SGBD.

Para visualizar os dados da tabela basta clicar com o botão direito do mouse sobre a tabela a seguir em View Data:

Vamos ver os dados do filme que cadastramos conforme a figura abaixo:

Quando iniciamos nossa aplicação pela primeira vez vimos que o banco de dados foi criado e a tabela foi criada vazia.

Podemos alterar esse comportamento e alimentar a nossa tabela durante a sua criação via código.

Vamos então ver como podemos fazer isso...

Alimentando o banco de dados

Vamos criar uma classe chamada SeedData na pasta Models e incluir o código abaixo nesta classe :

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
namespace MvcFilme.Models
{
    public class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcFilmeContext(
                serviceProvider.GetRequiredService<DbContextOptions<MvcFilmeContext>>()))
            {
                // porcura por filmes
                if (context.Filme.Any())
                {
                    return;  //DB foi alimentado
                }
                context.Filme.AddRange(
                     new Filme
                     {
                         Titulo = "A Bela e a Fera",
                         Lancamento = DateTime.Parse("2017-3-16"),
                         Genero = "Fantasia/Romance",
                         Preco = 7.99M
                     },
                     new Filme
                     {
                         Titulo = "Caça-Fantasmas",
                         Lancamento = DateTime.Parse("1984-3-13"),
                         Genero = "Comedia",
                         Preco = 8.99M
                     },
                     new Filme
                     {
                         Titulo = "Kong - A ilha da Caveira",
                         Lancamento = DateTime.Parse("2017-3-09"),
                         Genero = "Ficção",
                         Preco = 9.99M
                     },
                   new Filme
                   {
                       Titulo = "Rio Bravo",
                       Lancamento = DateTime.Parse("1959-4-15"),
                       Genero = "Western",
                       Preco = 3.99M
                   }
                );
                context.SaveChanges();
            }
        }
    }
}

Esta classe define o método Initialize() onde estamos incluindo alguns filmes na tabela Filme do banco de dados MvcFilmeContext.

Para usar esta classe vamos incluir a linha de código destacada em azul no método Configure() do arquivo Startup.cs :

         ......
       // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        SeedData.Initialize(app.ApplicationServices);
        }
       ......

Agora delete o registro que foi incluido na tabela Filme e reinicie a aplicação novamente. (F5 ou CTRL+F5)

Após clicar no link Filmes do macoratti você deverá ver a relação de filmes exibida conforme a figura a seguir:

Vemos assim as informações dos filmes que definimos no arquivo SeedData incluidos na tabela Filme.

Repetindo os procedimentos para visualizar os dados da tabela Filme no SQL Server Object Explorer podemos verificar o conteúdo da tabela Filme:

Na próxima parte do artigo vamos ajustar o controller e as views geradas da nossa aplicação.

Respondeu Jesus, e disse-lhes: Ainda que eu testifico de mim mesmo, o meu testemunho é verdadeiro, porque sei de onde vim, e para onde vou; mas vós não sabeis de onde venho, nem para onde vou.
Vós julgais segundo a carne; eu a ninguém julgo.
E, se na verdade julgo, o meu juízo é verdadeiro, porque não sou eu só, mas eu e o Pai que me enviou.

João 8:14-16

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti