Compartilhar via


Parte 5, trabalhar com um banco de dados em um aplicativo MVC ASP.NET Core

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.

Aviso

Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.

By Rick Anderson e Jon P Smith.

Introdução

Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo ASP.NET Core MVC.

Você aprenderá a:

  • Registre e configure o contexto do banco de dados do Entity Framework Core para seu aplicativo ASP.NET Core MVC.
  • Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
  • Use o SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando o Pesquisador de Objetos do SQL Server.
  • Preencha seu banco de dados com dados de exemplo iniciais.

Pré-requisito

Este tutorial usa um banco de dados que você configurou na etapa anterior: Parte 4, adicione um modelo a um aplicativo ASP.NET Core MVC.

Trabalhando com o contexto do banco de dados

O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

O sistema de Configuração do ASP.NET Core lê a chave ConnectionString. Para o desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Aviso

Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.

SQL Server Express LocalDB (banco de dados local)

LocalDB:

  • É uma versão leve do Mecanismo de Banco de Dados do SQL Server Express, instalada por padrão com o Visual Studio.
  • Inicia sob demanda usando uma cadeia de conexão.
  • É direcionado para o desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
  • Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.

Examinar o banco de dados

No menu Exibir, abra SSOX (Pesquisador de Objetos do SQL Server).

Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Designer de Exibição

Clique com o botão direito do mouse na tabela Filme > Designer de Exibição

Tabela Movie aberta no Designer

Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.

Clique com o botão direito na tabela Movie>Dados de Exibição

Clique com o botão direito do mouse na tabela Filme > Dados de Exibição

Tabela Movie aberta mostrando os dados da tabela

Propagar o banco de dados

Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Se houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Adicionar o inicializador de semeadura

Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapStaticAssets();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.

Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs) para que o método de propagação seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.

O aplicativo mostra os dados propagados.

Aplicativo de filme MVC aberto no Microsoft Edge, mostrando os dados do filme

Introdução

Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo ASP.NET Core MVC.

Você aprenderá a:

  • Registre e configure o contexto do banco de dados do Entity Framework Core para seu aplicativo ASP.NET Core MVC.
  • Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
  • Use o SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando o Pesquisador de Objetos do SQL Server.
  • Preencha seu banco de dados com dados de exemplo iniciais.

Pré-requisito

Este tutorial usa um banco de dados que você configurou na etapa anterior: Parte 4, adicione um modelo a um aplicativo ASP.NET Core MVC.

Trabalhando com o contexto do banco de dados

O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

O sistema de Configuração do ASP.NET Core lê a chave ConnectionString. Para o desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Aviso

Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.

SQL Server Express LocalDB (banco de dados local)

LocalDB:

  • É uma versão leve do Mecanismo de Banco de Dados do SQL Server Express, instalada por padrão com o Visual Studio.
  • Inicia sob demanda usando uma cadeia de conexão.
  • É direcionado para o desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
  • Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.

Examinar o banco de dados

No menu Exibir, abra SSOX (Pesquisador de Objetos do SQL Server).

Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Designer de Exibição

Clique com o botão direito do mouse na tabela Filme > Designer de Exibição

Tabela Movie aberta no Designer

Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.

Clique com o botão direito na tabela Movie>Dados de Exibição

Clique com o botão direito do mouse na tabela Filme > Dados de Exibição

Tabela Movie aberta mostrando os dados da tabela

Propagar o banco de dados

Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Se houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Adicionar o inicializador de semeadura

Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.

Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs) para que o método de propagação seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.

O aplicativo mostra os dados propagados.

Aplicativo de filme MVC aberto no Microsoft Edge, mostrando os dados do filme

Introdução

Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo ASP.NET Core MVC.

Você aprenderá a:

  • Registre e configure o contexto do banco de dados do Entity Framework Core para seu aplicativo ASP.NET Core MVC.
  • Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
  • Use o SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando o Pesquisador de Objetos do SQL Server.
  • Semente seu banco de dados com dados de exemplo iniciais.

Pré-requisito

Este tutorial usa um banco de dados que você configurou na etapa anterior: Parte 4, adicione um modelo a um aplicativo ASP.NET Core MVC.

Trabalhando com o contexto do banco de dados

O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

O sistema de Configuração do ASP.NET Core lê a chave ConnectionString. Para o desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:

"ConnectionStrings": {
  "MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}

Aviso

Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.

SQL Server Express LocalDB (banco de dados local)

LocalDB:

  • É uma versão leve do Mecanismo de Banco de Dados do SQL Server Express, instalada por padrão com o Visual Studio.
  • Inicia sob demanda usando uma cadeia de conexão.
  • É direcionado para o desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
  • Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.

Examinar o banco de dados

No menu Exibir, abra SSOX (Pesquisador de Objetos do SQL Server).

Clique com o botão direito do mouse na Movie tabela (dbo.Movie) > Designer de Exibição

Clique com o botão direito do mouse na tabela Filme > Designer de Exibição

Tabela Movie aberta no Designer

Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.

Clique com o botão direito na tabela Movie>Dados de Exibição

Clique com o botão direito do mouse na tabela Filme > Dados de Exibição

Tabela Movie aberta mostrando os dados da tabela

Propagar o banco de dados

Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models;

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using (var context = new MvcMovieContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<MvcMovieContext>>()))
        {
            // Look for any movies.
            if (context.Movie.Any())
            {
                return;   // DB has been seeded
            }
            context.Movie.AddRange(
                new Movie
                {
                    Title = "When Harry Met Sally",
                    ReleaseDate = DateTime.Parse("1989-2-12"),
                    Genre = "Romantic Comedy",
                    Price = 7.99M
                },
                new Movie
                {
                    Title = "Ghostbusters ",
                    ReleaseDate = DateTime.Parse("1984-3-13"),
                    Genre = "Comedy",
                    Price = 8.99M
                },
                new Movie
                {
                    Title = "Ghostbusters 2",
                    ReleaseDate = DateTime.Parse("1986-2-23"),
                    Genre = "Comedy",
                    Price = 9.99M
                },
                new Movie
                {
                    Title = "Rio Bravo",
                    ReleaseDate = DateTime.Parse("1959-4-15"),
                    Genre = "Western",
                    Price = 3.99M
                }
            );
            context.SaveChanges();
        }
    }
}

Se houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

<a name=snippet_"si">

Adicionar o inicializador de semeadura

Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.

Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs) para que o método de propagação seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.

O aplicativo mostra os dados propagados.

Aplicativo de filme MVC aberto no Microsoft Edge, mostrando os dados do filme

Introdução

Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo ASP.NET Core MVC.

Você aprenderá a:

  • Registre e configure o contexto do banco de dados do Entity Framework Core para seu aplicativo ASP.NET Core MVC.
  • Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
  • Use o SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando o Pesquisador de Objetos do SQL Server.
  • Semente seu banco de dados com dados de exemplo iniciais.

Pré-requisito

Este tutorial usa um banco de dados que você configurou na etapa anterior: Parte 4, adicione um modelo a um aplicativo ASP.NET Core MVC.

Trabalhando com o contexto do banco de dados

O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto do banco de dados é registrado com o contêiner Injeção de dependência no arquivo Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

O sistema de Configuração do ASP.NET Core lê a chave ConnectionString. Para o desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Aviso

Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.

SQL Server Express LocalDB (banco de dados local)

LocalDB:

  • É uma versão leve do Mecanismo de Banco de Dados do SQL Server Express, instalada por padrão com o Visual Studio.
  • Inicia sob demanda usando uma cadeia de conexão.
  • É direcionado para o desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
  • Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.

Propagar o banco de dados

Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Se houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Adicionar o inicializador de semeadura

Substitua o conteúdo de Program.cs pelo seguinte código. O novo código está realçado.

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    SeedData.Initialize(services);
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.

Testar o aplicativo. Force o aplicativo a ser inicializado, chamando o código no arquivo Program.cs) para que o método de propagação seja executado. Para forçar a inicialização, feche a janela do prompt de comando que o Visual Studio abriu e reinicie pressionando Ctrl+F5.

O aplicativo mostra os dados propagados.

Aplicativo de filme MVC aberto no Microsoft Edge, mostrando os dados do filme

Introdução

Esta parte da série de tutoriais se concentra em trabalhar com um banco de dados SQL em seu aplicativo ASP.NET Core MVC.

Você aprenderá a:

  • Registre e configure o contexto do banco de dados do Entity Framework Core para seu aplicativo ASP.NET Core MVC.
  • Trabalhe com cadeias de conexão de banco de dados para desenvolvimento local.
  • Use o SQL Server Express LocalDB para desenvolvimento e examine seu banco de dados e dados usando o Pesquisador de Objetos do SQL Server.
  • Preencha seu banco de dados com dados de amostra iniciais.

Pré-requisito

Este tutorial usa um banco de dados que você configurou na etapa anterior: Parte 4, adicione um modelo a um aplicativo ASP.NET Core MVC.

Trabalhando com o contexto do banco de dados

O objeto MvcMovieContext cuida da tarefa de se conectar ao banco de dados e mapear objetos Movie para registros do banco de dados. O contexto de banco de dados é registrado com o contêiner Injeção de Dependência no método ConfigureServices em Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    services.AddDbContext<MvcMovieContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}

O sistema de Configuração do ASP.NET Core lê a chave ConnectionString. Para o desenvolvimento local, ele obtém a cadeia de conexão do arquivo appsettings.json:

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Aviso

Este artigo usa um banco de dados local que não exige que o usuário seja autenticado. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos de teste e produção implantados, consulte Fluxos de autenticação seguros.

SQL Server Express LocalDB (banco de dados local)

LocalDB:

  • É uma versão leve do Mecanismo de Banco de Dados do SQL Server Express, instalada por padrão com o Visual Studio.
  • Inicia sob demanda usando uma cadeia de conexão.
  • É direcionado para o desenvolvimento de programas. É executado no modo de usuário e, portanto, não há nenhuma configuração complexa.
  • Por padrão, cria arquivos .mdf no diretório C:/Users/{user}.

Examinar o banco de dados

No menu Exibir, abra SSOX (Pesquisador de Objetos do SQL Server).

Menu de exibição

Clique com o botão direito na tabela Movie>Designer de Exibição

Clique com o botão direito do mouse na tabela Movie > Designer de Exibição

Tabela Movie aberta no Designer

Observe o ícone de chave ao lado de ID. Por padrão, o EF tornará uma propriedade chamada ID a chave primária.

Clique com o botão direito na tabela Movie>Dados de Exibição

Clique com o botão direito do mouse na tabela Movie > Dados de Exibição

Tabela Movie aberta mostrando os dados da tabela

Propagar o banco de dados

Crie uma nova classe chamada SeedData na pasta Models. Substitua o código gerado pelo seguinte:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                    new Movie
                    {
                        Title = "When Harry Met Sally",
                        ReleaseDate = DateTime.Parse("1989-2-12"),
                        Genre = "Romantic Comedy",
                        Price = 7.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters ",
                        ReleaseDate = DateTime.Parse("1984-3-13"),
                        Genre = "Comedy",
                        Price = 8.99M
                    },

                    new Movie
                    {
                        Title = "Ghostbusters 2",
                        ReleaseDate = DateTime.Parse("1986-2-23"),
                        Genre = "Comedy",
                        Price = 9.99M
                    },

                    new Movie
                    {
                        Title = "Rio Bravo",
                        ReleaseDate = DateTime.Parse("1959-4-15"),
                        Genre = "Western",
                        Price = 3.99M
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

Se houver um filme no banco de dados, o inicializador de semeadura será retornado e nenhum filme será adicionado.

if (context.Movie.Any())
{
    return;  // DB has been seeded.
}

Adicionar o inicializador de semeadura

Substitua o conteúdo de Program.cs pelo seguinte código:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;

namespace MvcMovie
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    SeedData.Initialize(services);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }

            host.Run();

        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Testar o aplicativo.

Exclua todos os registros no banco de dados. Faça isso com os links Excluir no navegador ou no SSOX.

Force o aplicativo a ser inicializado, chamando os métodos na classe Startup para que o método de semeadura seja executado. Para forçar a inicialização, o IIS Express deve ser interrompido e reiniciado. Faça isso com uma das seguintes abordagens:

  • Clique com botão direito do mouse no ícone na bandeja do sistema do IIS Express na área de notificação e toque em Sair ou em Parar site:

    Ícone de bandeja do sistema do IIS Express

    Menu contextual

    • Se você estiver executando o VS no modo sem depuração, pressione F5 para executar no modo de depuração
    • Se você estiver executando o VS no modo de depuração, pare o depurador e pressione F5

O aplicativo mostra os dados propagados.

Aplicativo de filme MVC aberto no Microsoft Edge, mostrando os dados do filme