Partilhar via


Parte 2, adicionar um modelo a um aplicativo Razor Pages no ASP.NET Core

Note

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

Warning

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

Neste tutorial, as classes são adicionadas para gerenciar filmes em um banco de dados. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados. Você escreve as classes de modelo primeiro e EF Core cria o banco de dados.

As classes de modelo são conhecidas como classes POCO (de "Plain-Old CLR Objects") porque não têm uma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Adicionar um modelo de dados

  1. No Gerenciador de Soluções , clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

  2. Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

  3. Adicione as seguintes propriedades à classe Movie:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • Um [DataType] atributo que especifica o tipo de dados na propriedade ReleaseDate. Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.
  • O ponto de interrogação após string indica que a propriedade é anulável. Para obter mais informações, consulte Tipos de referência anuláveis.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

  1. Crie a pasta Pages/Movies:

    1. Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
    2. Nomeie a pasta Filmes.
  2. Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

    Novo item estruturado

  3. Na caixa de diálogo Adicionar Novo Andaime, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

    Adicionar andaime

  4. Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

    1. No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
    2. Na classe de contexto Data, na linha, selecione o sinal + de adição (mais).
      1. Na caixa de diálogo Adicionar Contexto de Dados, o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.
      2. Na lista suspensa Provedor de banco de dados, selecione SQL Server.
    3. Selecione Adicionar.

    Adicionar Razor páginas

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Warning

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.

Arquivos criados e atualizados

O processo de andaime cria os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Os arquivos criados são explicados no próximo tutorial.

O processo de andaime adiciona o seguinte código realçado ao arquivo Program.cs:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

As alterações Program.cs são explicadas neste tutorial mais adiante.

Criar o esquema de banco de dados inicial usando o recurso de migração do EF

O recurso de migrações no Entity Framework Core fornece uma maneira de:

  • Crie o esquema de banco de dados inicial.
  • Atualize incrementalmente o esquema do banco de dados para mantê-lo sincronizado com o modelo de dados do aplicativo. Os dados existentes na base de dados são preservados.

Nesta seção, a janela Package Manager Console (PMC) é usada para:

  • Adicione uma migração inicial.

  • Atualize o banco de dados com a migração inicial.

  • No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

    Menu PMC

  • No PMC, digite o seguinte comando:

    Add-Migration InitialCreate
    
  • O comando Add-Migration gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear a migração. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

O seguinte aviso é exibido, que é abordado em uma etapa posterior:

Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'.

  • No PMC, digite o seguinte comando:

    Update-Database
    

    O comando Update-Database executa o método Up em migrações que não foram aplicadas. Nesse caso, o comando executa o método Up no arquivo Migrations/<time-stamp>_InitialCreate.cs, que cria o banco de dados.

O contexto dos dados RazorPagesMovieContext:

  • Deriva de Microsoft.EntityFrameworkCore.DbContext.
  • Especifica quais entidades são incluídas no modelo de dados.
  • Coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie.

A classe RazorPagesMovieContext no arquivo gerado Data/RazorPagesMovieContext.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  1. Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

    Se você receber o seguinte erro:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Você perdeu a etapa migrações .

  2. Teste o link Criar Novo.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  3. Teste o Editar, Detalhese Excluir links.

O próximo tutorial explica os ficheiros criados por scaffolding.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços (como Razor Pages) são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência. O seguinte código realçado é adicionado ao arquivo Program.cs pelo scaffolder:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Solução de problemas com o exemplo concluído

Se você encontrar um problema que não pode resolver, compare seu código com o projeto concluído. Ver ou descarregar o do projeto finalizado (como descarregar).

Próximos passos

Neste tutorial, as classes são adicionadas para gerenciar filmes em um banco de dados. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados. Você escreve as classes de modelo primeiro e EF Core cria o banco de dados.

As classes de modelo são conhecidas como classes POCO (de "Plain-Old CLR Objects") porque não têm uma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Adicionar um modelo de dados

  1. No Gerenciador de Soluções , clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

  2. Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

  3. Adicione as seguintes propriedades à classe Movie:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • Um [DataType] atributo que especifica o tipo de dados na propriedade ReleaseDate. Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.
  • O ponto de interrogação após string indica que a propriedade é anulável. Para obter mais informações, consulte Tipos de referência anuláveis.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

  1. Crie a pasta Pages/Movies:

    1. Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
    2. Nomeie a pasta Filmes.
  2. Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

    Novo item estruturado

  3. Na caixa de diálogo Adicionar Novo Andaime, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

    Adicionar andaime

  4. Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

    1. No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
    2. Na classe de contexto Data, na linha, selecione o sinal + de adição (mais).
      1. Na caixa de diálogo Adicionar Contexto de Dados, o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.
      2. Na lista suspensa Provedor de banco de dados, selecione SQL Server.
    3. Selecione Adicionar.

    Adicionar Razor páginas

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Warning

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.

Arquivos criados e atualizados

O processo de andaime cria os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Os arquivos criados são explicados no próximo tutorial.

O processo de andaime adiciona o seguinte código realçado ao arquivo Program.cs:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

As alterações Program.cs são explicadas neste tutorial mais adiante.

Criar o esquema de banco de dados inicial usando o recurso de migração do EF

O recurso de migrações no Entity Framework Core fornece uma maneira de:

  • Crie o esquema de banco de dados inicial.
  • Atualize incrementalmente o esquema do banco de dados para mantê-lo sincronizado com o modelo de dados do aplicativo. Os dados existentes na base de dados são preservados.

Nesta seção, a janela Package Manager Console (PMC) é usada para:

  • Adicione uma migração inicial.

  • Atualize o banco de dados com a migração inicial.

  • No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

    Menu PMC

  • No PMC, digite o seguinte comando:

    Add-Migration InitialCreate
    
  • O comando Add-Migration gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear a migração. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

O seguinte aviso é exibido, que é abordado em uma etapa posterior:

Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'.

  • No PMC, digite o seguinte comando:

    Update-Database
    

    O comando Update-Database executa o método Up em migrações que não foram aplicadas. Nesse caso, o comando executa o método Up no arquivo Migrations/<time-stamp>_InitialCreate.cs, que cria o banco de dados.

O contexto dos dados RazorPagesMovieContext:

  • Deriva de Microsoft.EntityFrameworkCore.DbContext.
  • Especifica quais entidades são incluídas no modelo de dados.
  • Coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  1. Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

    Se você receber o seguinte erro:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Você perdeu a etapa migrações .

  2. Teste o link Criar Novo.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  3. Teste o Editar, Detalhese Excluir links.

O próximo tutorial explica os ficheiros criados por scaffolding.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços (como Razor Pages) são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência. O seguinte código realçado é adicionado ao arquivo Program.cs pelo scaffolder:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Solução de problemas com o exemplo concluído

Se você encontrar um problema que não pode resolver, compare seu código com o projeto concluído. Ver ou descarregar o do projeto finalizado (como descarregar).

Próximos passos

Neste tutorial, as classes são adicionadas para gerenciar filmes em um banco de dados. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados. Você escreve as classes de modelo primeiro e EF Core cria o banco de dados.

As classes de modelo são conhecidas como classes POCO (de "Plain-Old CLR Objects") porque não têm uma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Adicionar um modelo de dados

  1. No Gerenciador de Soluções , clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

  2. Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

  3. Adicione as seguintes propriedades à classe Movie:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models;
    
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }
        public decimal Price { get; set; }
    }
    

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • Um [DataType] atributo que especifica o tipo de dados na propriedade ReleaseDate. Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.
  • O ponto de interrogação após string indica que a propriedade é anulável. Para obter mais informações, consulte Tipos de referência anuláveis.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

  1. Crie a pasta Pages/Movies:

    1. Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
    2. Nomeie a pasta Filmes.
  2. Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

    Novo item estruturado

  3. Na caixa de diálogo Adicionar Novo Andaime, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

    Adicionar andaime

  4. Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

    1. No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
    2. Na classe de contexto Data, na linha, selecione o sinal + de adição (mais).
      1. Na caixa de diálogo Adicionar Contexto de Dados, o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.
      2. Na lista suspensa Provedor de banco de dados, selecione SQL Server.
    3. Selecione Adicionar.

    Adicionar Razor páginas

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Warning

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.

Arquivos criados e atualizados

O processo de andaime cria os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Os arquivos criados são explicados no próximo tutorial.

O processo de andaime adiciona o seguinte código realçado ao arquivo Program.cs:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

As alterações Program.cs são explicadas neste tutorial mais adiante.

Criar o esquema de banco de dados inicial usando o recurso de migração do EF

O recurso de migrações no Entity Framework Core fornece uma maneira de:

  • Crie o esquema de banco de dados inicial.
  • Atualize incrementalmente o esquema do banco de dados para mantê-lo sincronizado com o modelo de dados do aplicativo. Os dados existentes na base de dados são preservados.

Nesta seção, a janela Package Manager Console (PMC) é usada para:

  • Adicione uma migração inicial.
  • Atualize o banco de dados com a migração inicial.
  1. No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

    Menu PMC

  2. No PMC, digite os seguintes comandos:

    Add-Migration InitialCreate
    Update-Database
    
  • O comando Add-Migration gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear a migração. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

  • O comando Update-Database executa o método Up em migrações que não foram aplicadas. Nesse caso, o comando executa o método Up no arquivo Migrations/<time-stamp>_InitialCreate.cs, que cria o banco de dados.

O seguinte aviso é exibido, que é abordado em uma etapa posterior:

Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'.

O contexto dos dados RazorPagesMovieContext:

  • Deriva de Microsoft.EntityFrameworkCore.DbContext.
  • Especifica quais entidades são incluídas no modelo de dados.
  • Coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  1. Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

    Se você receber o seguinte erro:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Você perdeu a etapa migrações .

  2. Teste o link Criar Novo.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  3. Teste o Editar, Detalhese Excluir links.

O próximo tutorial explica os ficheiros criados por scaffolding.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços (como Razor Pages) são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência. O seguinte código realçado é adicionado ao arquivo Program.cs pelo scaffolder:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

Solução de problemas com o exemplo concluído

Se você encontrar um problema que não pode resolver, compare seu código com o projeto concluído. Ver ou descarregar o do projeto finalizado (como descarregar).

Próximos passos

Neste tutorial, as classes são adicionadas para gerenciar filmes em um banco de dados. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados. Você escreve as classes de modelo primeiro e EF Core cria o banco de dados.

As classes de modelo são conhecidas como classes POCO (de "Plain-Old CLR Objects") porque não têm uma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Adicionar um modelo de dados

  1. No Gerenciador de Soluções , clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

  2. Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

  3. Adicione as seguintes propriedades à classe Movie:

    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; } = string.Empty;
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; } = string.Empty;
            public decimal Price { get; set; }
        }
    }
    

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • Um [DataType] atributo que especifica o tipo de dados na propriedade ReleaseDate. Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

  1. Adicione o pacote NuGet Microsoft.EntityFrameworkCore.Design, que é necessário para a ferramenta de andaime.

    1. No menu Ferramentas, selecione Gestor de Pacotes NuGet>Gerir Pacotes NuGet para a SoluçãoGestor de Pacotes NuGet - gerir
    2. Selecione a guia Procurar.
    3. Digite Microsoft.EntityFrameworkCore.Design e selecione-o na lista.
    4. Verifique Project e, em seguida, selecione Instalar
    5. Selecione Aceito na caixa de diálogo de aceitação de licença. pt-PT: Gestor de Pacotes NuGet - adicionar pacote
  2. Crie a pasta Pages/Movies:

    1. Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
    2. Nomeie a pasta Filmes.
  3. Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

    Novo item estruturado

  4. Na caixa de diálogo Adicionar Novo Andaime, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

    Adicionar andaime

  5. Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

    1. No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
    2. Na classe de contexto Data, na linha, selecione o sinal + de adição (mais).
      1. Na caixa de diálogo Adicionar Contexto de Dados, o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.
    3. Selecione Adicionar.

    Adicionar Razor páginas

    Se você receber uma mensagem de erro informando que precisa instalar o pacote Microsoft.EntityFrameworkCore.SqlServer, repita as etapas começando com Adicionar>Novo Item Andaime.

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Warning

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.

Arquivos criados e atualizados

O processo de andaime cria os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Os arquivos criados são explicados no próximo tutorial.

O processo de andaime adiciona o seguinte código realçado ao arquivo Program.cs:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

As alterações Program.cs são explicadas neste tutorial mais adiante.

Criar o esquema de banco de dados inicial usando o recurso de migração do EF

O recurso de migrações no Entity Framework Core fornece uma maneira de:

  • Crie o esquema de banco de dados inicial.
  • Atualize incrementalmente o esquema do banco de dados para mantê-lo sincronizado com o modelo de dados do aplicativo. Os dados existentes na base de dados são preservados.

Nesta seção, a janela Package Manager Console (PMC) é usada para:

  • Adicione uma migração inicial.
  • Atualize o banco de dados com a migração inicial.
  1. No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

    Menu PMC

  2. No PMC, digite os seguintes comandos:

    Add-Migration InitialCreate
    Update-Database
    
    

Os comandos anteriores são instalados as ferramentas do Entity Framework Core e executam o comando migrations para gerar o código que cria o esquema de banco de dados inicial.

O seguinte aviso é exibido, que é abordado em uma etapa posterior:

Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'.

O comando migrations gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear as migrações. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

O comando update executa o método Up em migrações que não foram aplicadas. Nesse caso, update executa o método Up no arquivo Migrations/<time-stamp>_InitialCreate.cs, que cria o banco de dados.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços (como Razor Pages) são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência. O seguinte código realçado é adicionado ao arquivo Program.cs pelo scaffolder:

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/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.MapRazorPages();

app.Run();

O contexto dos dados RazorPagesMovieContext:

  • Deriva de Microsoft.EntityFrameworkCore.DbContext.
  • Especifica quais entidades são incluídas no modelo de dados.
  • Coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  1. Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

    Se você receber o seguinte erro:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Você perdeu a etapa migrações .

  2. Teste o link Criar Novo.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  3. Teste o Editar, Detalhese Excluir links.

O próximo tutorial explica os ficheiros criados por scaffolding.

Solução de problemas com o exemplo concluído

Se você encontrar um problema que não pode resolver, compare seu código com o projeto concluído. Ver ou descarregar o do projeto finalizado (como descarregar).

Próximos passos

Nesta seção, as classes são adicionadas para gerenciar filmes em um banco de dados. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados. Você escreve as classes de modelo primeiro e EF Core cria o banco de dados.

As classes de modelo são conhecidas como classes POCO (de "Plain-Old CLR Objects") porque não têm uma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Ver ou descarregar código de exemplo (como descarregar).

Adicionar um modelo de dados

  1. No Gerenciador de Soluções , clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

  2. Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

  3. Adicione as seguintes propriedades à classe Movie:

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RazorPagesMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
            public string Title { get; set; }
    
            [DataType(DataType.Date)]
            public DateTime ReleaseDate { get; set; }
            public string Genre { get; set; }
            public decimal Price { get; set; }
        }
    }
    

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • [DataType(DataType.Date)]: O atributo [DataType] especifica o tipo dos dados (Date). Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

  1. Crie uma pasta Pages/Movies:

    1. Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
    2. Nomeie a pasta Filmes.
  2. Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

    Novo item estruturado

  3. Na caixa de diálogo Adicionar Scaffold, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

    Adicionar andaime

  4. Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

    1. No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
    2. Na classe de contexto Data, na linha, selecione o sinal + de adição (mais).
      1. Na caixa de diálogo Adicionar Contexto de Dados, o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.
    3. Selecione Adicionar.

    Adicionar Razor páginas

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Warning

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.

Arquivos criados e atualizados

O processo de andaime cria os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Arquivos atualizados

  • Startup.cs

Os arquivos criados e atualizados são explicados na próxima seção.

Criar o esquema de banco de dados inicial usando o recurso de migração do EF

O recurso de migrações no Entity Framework Core fornece uma maneira de:

  • Crie o esquema de banco de dados inicial.
  • Atualize incrementalmente o esquema do banco de dados para mantê-lo sincronizado com o modelo de dados do aplicativo. Os dados existentes na base de dados são preservados.

Nesta seção, a janela Package Manager Console (PMC) é usada para:

  • Adicione uma migração inicial.
  • Atualize o banco de dados com a migração inicial.
  1. No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

    Menu PMC

  2. No PMC, digite os seguintes comandos:

    Add-Migration InitialCreate
    Update-Database
    

Para o SQL Server, os comandos anteriores geram o seguinte aviso: "Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'."

Ignore o aviso, pois ele será abordado em uma etapa posterior.

O comando migrations gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear as migrações. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

O comando update executa o método Up em migrações que não foram aplicadas. Nesse caso, update executa o método Up no arquivo Migrations/<time-stamp>_InitialCreate.cs, que cria o banco de dados.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços (como Razor Pages) são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência.

Examine o método Startup.ConfigureServices. A linha destacada foi adicionada pelo montador de andaimes:

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

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

O RazorPagesMovieContext coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie. O contexto de dados (RazorPagesMovieContext) é derivado de Microsoft.EntityFrameworkCore.DbContext. O contexto de dados especifica quais entidades são incluídas no modelo de dados.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  1. Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

    Se você receber o seguinte erro:

    SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
    Login failed for user 'User-name'.
    

    Você perdeu a etapa migrações .

  2. Teste o link Criar.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  3. Teste o Editar, Detalhese Excluir links.

Registo de SQL do Entity Framework Core

A configuração de registo geralmente é fornecida pela seção Logging de arquivos appsettings.{Environment}.json. Para registrar instruções SQL, adicione "Microsoft.EntityFrameworkCore.Database.Command": "Information" ao arquivo appsettings.Development.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
     ,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
    }
  },
  "AllowedHosts": "*"
}

Com o JSON anterior, as instruções SQL são exibidas na linha de comando e na janela de saída do Visual Studio.

Para obter mais informações, consulte Fazendo login no .NET e no ASP.NET Core e este problema do GitHub.

O próximo tutorial explica os ficheiros criados por scaffolding.

Próximos passos

Nesta secção, adicionam-se classes para a gestão de filmes. As classes de modelo do aplicativo usam EF Core do Entity Framework Core () para trabalhar com o banco de dados. EF Core é um mapeador objeto-relacional (O/RM) que simplifica o acesso aos dados.

As classes de modelo são chamadas de classes POCO (de "objetos CLR simples") porque não têm nenhuma dependência de EF Core. Eles definem as propriedades dos dados armazenados no banco de dados.

Ver ou descarregar código de exemplo (como descarregar).

Warning

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.

Adicionar um modelo de dados

Clique com o botão direito do mouse no projeto RazorPagesMovie>Adicionar>Nova Pasta. Nomeie a pasta Models.

Clique com o botão direito do rato na pasta Models. Selecione Adicionar>classe. Dê o nome à classe Filme.

Adicione as seguintes propriedades à classe Movie:

using System;
using System.ComponentModel.DataAnnotations;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

A classe Movie contém:

  • O campo ID é exigido pelo banco de dados para a chave primária.

  • [DataType(DataType.Date)]: O atributo DataType especifica o tipo de dados (Date). Com este atributo:

    • O usuário não é obrigado a inserir informações de hora no campo de data.
    • Apenas a data é exibida, não as informações de hora.

DataAnnotations são abordados em um tutorial posterior.

DataAnnotations são abordados em um tutorial posterior.

Crie o projeto para verificar se não há erros de compilação.

Andaime o modelo do filme

Nesta seção, o modelo do filme é andaime. Ou seja, a ferramenta de andaime produz páginas para operações Criar, Ler, Atualizar e Excluir (CRUD) para o modelo de filme.

Crie uma pasta Pages/Movies:

  • Clique com o botão direito do rato na pasta Páginas>Adicionar>Nova Pasta.
  • Nomeie a pasta Filmes.

Clique com o botão direito do rato na pasta Pages/Movies>Adicionar>Novo Item Estruturado.

Novo item estruturado no VSCode

Na caixa de diálogo Adicionar Scaffold, selecione Razor Páginas usando o Entity Framework (CRUD)>Adicionar.

Adicionar Scaffold no VScode

Complete a caixa de diálogo Adicionar Razor Páginas usando o Entity Framework (CRUD).

  • No menu pendente da classe Model , selecione Filme (RazorPagesMovie.Models).
  • Na linha da classe de contexto Dados, selecione o sinal de + (mais) e altere o nome gerado de RazorPagesMovie.Models.RazorPagesMovieContext para RazorPagesMovie.Dados..RazorPagesMovieContext. Esta alteração não é necessária. Ele cria a classe de contexto do banco de dados com o namespace correto.
  • Selecione Adicionar.

Adicionar Razor páginas no VSCode

O arquivo appsettings.json é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.

Ficheiros criados

O processo de andaime cria e atualiza os seguintes ficheiros:

  • Páginas/Filmes: Criar, Excluir, Detalhes, Editar e Indexar.
  • Data/RazorPagesMovieContext.cs

Updated

  • Startup.cs

Os arquivos criados e atualizados são explicados na próxima seção.

Migração inicial

Nesta seção, o Console do Gerenciador de Pacotes (PMC) é usado para:

  • Adicione uma migração inicial.
  • Atualize o banco de dados com a migração inicial.

No menu Ferramentas de, selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

Menu PMC

No PMC, digite os seguintes comandos:

Add-Migration InitialCreate
Update-Database

Os comandos anteriores geram o seguinte aviso: "Nenhum tipo foi especificado para a coluna decimal 'Preço' no tipo de entidade 'Filme'. Isso fará com que os valores sejam truncados silenciosamente se não se ajustarem à precisão e escala padrão. Especifique explicitamente o tipo de coluna do servidor SQL que pode acomodar todos os valores usando 'HasColumnType()'."

Ignore o aviso, pois ele será abordado em uma etapa posterior.

O comando migrations gera código para criar o esquema de banco de dados inicial. O esquema é baseado no modelo especificado em DbContext. O argumento InitialCreate é usado para nomear as migrações. Qualquer nome pode ser usado, mas por convenção é selecionado um nome que descreve a migração.

O comando update executa o método Up em migrações que não foram aplicadas. Nesse caso, update executa o método Up em Migrations/<time-stamp>_InitialCreate.cs arquivo, que cria o banco de dados.

Examinar o contexto registrado com a injeção de dependência

ASP.NET Core é construído com injeção de dependência. Serviços, como o contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo. Os componentes que requerem esses serviços, como Razor Pages, são fornecidos por meio de parâmetros do construtor. O código do construtor que obtém uma instância de contexto de banco de dados é mostrado posteriormente no tutorial.

A ferramenta de scaffolding criou automaticamente um contexto de base de dados e registou-o com o contentor de injeção de dependência.

Examine o método Startup.ConfigureServices. A linha destacada foi adicionada pelo montador de andaimes:

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

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

O RazorPagesMovieContext coordena a funcionalidade EF Core, como Criar, Ler, Atualizar e Eliminar, para o modelo Movie. O contexto de dados (RazorPagesMovieContext) é derivado de Microsoft.EntityFrameworkCore.DbContext. O contexto de dados especifica quais entidades são incluídas no modelo de dados.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Data
{
    public class RazorPagesMovieContext : DbContext
    {
        public RazorPagesMovieContext (
            DbContextOptions<RazorPagesMovieContext> options)
            : base(options)
        {
        }

        public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
    }
}

O código anterior cria uma propriedade DbSet<Movie> para o conjunto de entidades. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados. Uma entidade corresponde a uma linha na tabela.

O nome da cadeia de conexão é passado para o contexto ao chamar um método num objeto DbContextOptions. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do arquivo appsettings.json.

Testar a aplicação

  • Execute o aplicativo e anexe /Movies ao URL no navegador (http://localhost:port/movies).

Se você receber o erro:

SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.

Você perdeu a etapa migrações .

  • Teste o link Criar.

    Criar página

    Note

    Talvez não seja possível inserir vírgulas decimais no campo Price. Para oferecer suporte a de validação do jQuery para localidades diferentes do inglês que usam uma vírgula (",") para um ponto decimal e para formatos de data não US-English, o aplicativo deve ser globalizado. Para obter instruções sobre globalização, consulte este problema do GitHub.

  • Teste o Editar, Detalhese Excluir links.

O próximo tutorial explica os ficheiros criados por scaffolding.

Próximos passos