Parte 2, adicionar um modelo a um Razor aplicativo de páginas no ASP.NET CorePart 2, add a model to a Razor Pages app in ASP.NET Core

De Rick AndersonBy Rick Anderson

Nesta seção, classes são adicionadas para o gerenciamento de filmes em um banco de dados.In this section, classes are added for managing movies in a database. As classes de modelo do aplicativo usam Entity Framework Core (EF Core) para trabalhar com o banco de dados.The app's model classes use Entity Framework Core (EF Core) to work with the database. EF Core é um mapeador relacional de objeto (O/RM) que simplifica O acesso a dados.EF Core is an object-relational mapper (O/RM) that simplifies data access. Primeiro, você escreve as classes de modelo e EF Core cria o banco de dados.You write the model classes first, and EF Core creates the database.

As classes de modelo são conhecidas como classes POCO (de "P Lain-o LD C LR o bjects") porque não têm uma dependência em EF Core.The model classes are known as POCO classes (from "P lain-O ld C LR O bjects") because they don't have a dependency on EF Core. Elas definem as propriedades dos dados que são armazenados no banco de dados.They define the properties of the data that are stored in the database.

Exiba ou baixe o código de exemplo (como baixar).View or download sample code (how to download).

Adicionar um modelo de dadosAdd a data model

  1. Em Gerenciador de soluções, clique com o botão direito do mouse no projeto Razor PagesMovie > Adicionar > nova pasta.In Solution Explorer, right-click the RazorPagesMovie project > Add > New Folder. Nomeie a pasta como Modelos.Name the folder Models.

  2. Clique com o botão direito do mouse na pasta modelos .Right-click the Models folder. Selecione Adicionar > classe.Select Add > Class. Dê à classe o nome Movie.Name the class Movie.

  3. Adicione as seguintes propriedades à classe Movie:Add the following properties to the Movie class:

    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:The Movie class contains:

  • O campo ID é necessário para o banco de dados para a chave primária.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: O atributo [DataType] especifica o tipo dos dados ( Date ).[DataType(DataType.Date)]: The [DataType] attribute specifies the type of the data (Date). Com esse atributo:With this attribute:

    • O usuário não é solicitado a inserir informações de hora no campo de data.The user isn't required to enter time information in the date field.
    • Somente a data é exibida, não as informações de tempo.Only the date is displayed, not time information.

DataAnnotations são abordados em um tutorial posterior.DataAnnotations are covered in a later tutorial.

Crie o projeto para verificar se não há erros de compilação.Build the project to verify there are no compilation errors.

Fazer scaffold do modelo de filmeScaffold the movie model

Nesta seção, é feito o scaffold do modelo de filme.In this section, the movie model is scaffolded. Ou seja, a ferramenta de scaffolding gera páginas para operações de CRUD (Criar, Ler, Atualizar e Excluir) para o modelo do filme.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

  1. Crie uma pasta Pages/Movies:Create a Pages/Movies folder:

    1. Clique com o botão direito do mouse na pasta páginas > Adicionar > nova pasta.Right-click on the Pages folder > Add > New Folder.
    2. Nomeie a pasta filmes.Name the folder Movies.
  2. Clique com o botão direito do mouse na pasta páginas/filmes > Adicionar > novo item com Scaffold.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

    Imagem das instruções anteriores.

  3. Na caixa de diálogo Adicionar Scaffold , selecione Razor páginas usando Entity Framework (CRUD) > Adicionar.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

    Imagem das instruções anteriores.

  4. Conclua a caixa de diálogo Adicionar Razor páginas usando Entity Framework (CRUD) :Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

    1. Na lista suspensa classe de modelo , selecione filme ( Razor PagesMovie. Models).In the Model class drop down, select Movie (RazorPagesMovie.Models).
    2. Na linha Classe de contexto de dados, selecione o sinal de + (adição).In the Data context class row, select the + (plus) sign.
      1. Na caixa de diálogo adicionar contexto de dados , o nome da classe RazorPagesMovie.Data.RazorPagesMovieContext é gerado.In the Add Data Context dialog, the class name RazorPagesMovie.Data.RazorPagesMovieContext is generated.
    3. Selecione Adicionar.Select Add.

    Imagem das instruções anteriores.

O appsettings.json arquivo é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.The appsettings.json file is updated with the connection string used to connect to a local database.

Arquivos criadosFiles created

O processo de scaffold cria e atualiza os arquivos a seguir:The scaffold process creates and updates the following files:

  • Páginas/filmes: criar, excluir, detalhes, editar e Index .Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/ Razor PagesMovieContext. csData/RazorPagesMovieContext.cs

AtualizadoUpdated

  • Startup.csStartup.cs

Os arquivos criados e atualizados são explicados na próxima seção.The created and updated files are explained in the next section.

Criar o esquema de banco de dados inicial usando o recurso de migração do EFCreate the initial database schema using EF's migration feature

O recurso de migrações no Entity Framework Core fornece uma maneira de:The migrations feature in Entity Framework Core provides a way to:

  • Crie o esquema de banco de dados inicial.Create the initial database schema.
  • Atualize incrementalmente o esquema de banco de dados para mantê-lo em sincronia com o modelo de dado do aplicativo.Incrementally update the database schema to keep it in sync with the application's data model. O banco de dados existente é preservado.Existing data in the database is preserved.

Nesta seção, a janela do Package Manager Console (PMC) é usada para:In this section, the Package Manager Console (PMC) window is used to:

  • Adicionar uma migração inicial.Add an initial migration.
  • Atualize o banco de dados com a migração inicial.Update the database with the initial migration.
  1. No menu ferramentas , selecione Gerenciador de pacotes NuGet > console do Gerenciador de pacotes.From the Tools menu, select NuGet Package Manager > Package Manager Console.

    Menu do PMC

  2. No PMC, insira os seguintes comandos:In the PMC, enter the following commands:

    Add-Migration InitialCreate
    Update-Database
    

Os comandos anteriores geram o seguinte aviso: "nenhum tipo foi especificado para a coluna decimal ' Price ' no tipo de entidade ' Movie '.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Isso fará com que valores sejam truncados silenciosamente se não couberem na precisão e na escala padrão.This will cause values to be silently truncated if they do not fit in the default precision and scale. Especifique explicitamente o tipo de coluna do SQL Server que pode acomodar todos os valores usando 'HasColumnType()'.”Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignore o aviso, pois ele será abordado em uma etapa posterior.Ignore the warning, as it will be addressed in a later step.

O comando migrations gera código para criar o esquema de banco de dados inicial.The migrations command generates code to create the initial database schema. O esquema é baseado no modelo especificado em DbContext .The schema is based on the model specified in DbContext. O argumento InitialCreate é usado para nomear as migrações.The InitialCreate argument is used to name the migrations. Qualquer nome pode ser usado, mas, por convenção, um nome que descreve a migração é selecionado.Any name can be used, but by convention a name is selected that describes the migration.

O update comando executa o Up método em migrações que não foram aplicadas.The update command runs the Up method in migrations that have not been applied. Nesse caso, update o executa o Up método no arquivo migrations/ <time-stamp> _InitialCreate. cs , que cria o banco de dados.In this case, update runs the Up method in the Migrations/<time-stamp>_InitialCreate.cs file, which creates the database.

Examinar o contexto registrado com a injeção de dependênciaExamine the context registered with dependency injection

O ASP.NET Core é construído com a injeção de dependência.ASP.NET Core is built with dependency injection. 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.Services, such as the EF Core database context, are registered with dependency injection during application startup. Os componentes que exigem esses serviços (como Razor páginas) são fornecidos a esses serviços por meio de parâmetros do construtor.Components that require these services (such as Razor Pages) are provided these services via constructor parameters. O código de construtor que obtém uma instância de contexto do banco de dados é mostrado mais adiante no tutorial.The constructor code that gets a database context instance is shown later in the tutorial.

A ferramenta scaffolding criou automaticamente um contexto de banco de dados e o registrou com o contêiner de injeção de dependência.The scaffolding tool automatically created a database context and registered it with the dependency injection container.

Examine o método Startup.ConfigureServices.Examine the Startup.ConfigureServices method. A linha destacada foi adicionada pelo scaffolder:The highlighted line was added by the scaffolder:

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

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

As RazorPagesMovieContext coordenadas EF Core funcionalidade, como criar, ler, atualizar e excluir, para o Movie modelo.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update and Delete, for the Movie model. O contexto de dados (RazorPagesMovieContext) deriva de Microsoft.EntityFrameworkCore.DbContext.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. O contexto de dados especifica quais entidades são incluídas no modelo de dados.The data context specifies which entities are included in the data model.

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 <Movie> DbSet para o conjunto de entidades.The preceding code creates a DbSet<Movie> property for the entity set. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados.In Entity Framework terminology, an entity set typically corresponds to a database table. Uma entidade corresponde a uma linha da tabela.An entity corresponds to a row in the table.

O nome da cadeia de conexão é passado para o contexto com a chamada de um método em um objeto DbContextOptions.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do appsettings.json arquivo.For local development, the Configuration system reads the connection string from the appsettings.json file.

Testar o aplicativoTest the app

  1. Executar o aplicativo e acrescentar /Movies à URL no navegador (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

    Se você receber o seguinte erro:If you receive the following error:

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

    Você perdeu a etapa de migrações.You missed the migrations step.

  2. Teste o link Criar.Test the Create link.

    Criar página

    Observação

    Talvez você não consiga inserir casas decimais ou vírgulas no campo Price.You may not be able to enter decimal commas in the Price field. Para dar suporte à validação do jQuery para localidades com idiomas diferentes do inglês que usam uma vírgula (",") para um ponto decimal e formatos de data diferentes do inglês dos EUA, o aplicativo precisa ser globalizado.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Para obter instruções sobre a globalização, consulte esse problema no GitHub.For globalization instructions, see this GitHub issue.

  3. Teste os links Editar, Detalhes e Excluir.Test the Edit, Details, and Delete links.

O tutorial a seguir explica os arquivos criados por scaffolding.The next tutorial explains the files created by scaffolding.

Recursos adicionaisAdditional resources

Nesta seção, as classes são adicionadas para o gerenciamento de filmes.In this section, classes are added for managing movies. As classes de modelo do aplicativo usam Entity Framework Core (EF Core) para trabalhar com o banco de dados.The app's model classes use Entity Framework Core (EF Core) to work with the database. EF Core é um mapeador relacional de objeto (O/RM) que simplifica O acesso a dados.EF Core is an object-relational mapper (O/RM) that simplifies data access.

As classes de modelo são conhecidas como classes POCO (de "objetos CLR básicos") porque não têm nenhuma dependência do EF Core.The model classes are known as POCO classes (from "plain-old CLR objects") because they don't have any dependency on EF Core. Elas definem as propriedades dos dados que são armazenados no banco de dados.They define the properties of the data that are stored in the database.

Exiba ou baixe o código de exemplo (como baixar).View or download sample code (how to download).

Adicionar um modelo de dadosAdd a data model

Clique com o botão direito do mouse no projeto Razor PagesMovie > Adicionar > nova pasta.Right-click the RazorPagesMovie project > Add > New Folder. Nomeie a pasta como Modelos.Name the folder Models.

Clique com o botão direito do mouse na pasta modelos .Right-click the Models folder. Selecione Adicionar > classe.Select Add > Class. Dê à classe o nome Movie.Name the class Movie.

Adicione as seguintes propriedades à classe Movie:Add the following properties to the Movie class:

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:The Movie class contains:

  • O campo ID é necessário para o banco de dados para a chave primária.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: O atributo DataType especifica o tipo dos dados ( Date ).[DataType(DataType.Date)]: The DataType attribute specifies the type of the data (Date). Com esse atributo:With this attribute:

    • O usuário não precisa inserir informações de tempo no campo de data.The user is not required to enter time information in the date field.
    • Somente a data é exibida, não as informações de tempo.Only the date is displayed, not time information.

DataAnnotations são abordados em um tutorial posterior.DataAnnotations are covered in a later tutorial.

DataAnnotations são abordados em um tutorial posterior.DataAnnotations are covered in a later tutorial.

Crie o projeto para verificar se não há erros de compilação.Build the project to verify there are no compilation errors.

Fazer scaffold do modelo de filmeScaffold the movie model

Nesta seção, é feito o scaffold do modelo de filme.In this section, the movie model is scaffolded. Ou seja, a ferramenta de scaffolding gera páginas para operações de CRUD (Criar, Ler, Atualizar e Excluir) para o modelo do filme.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

Crie uma pasta Pages/Movies:Create a Pages/Movies folder:

  • Clique com o botão direito do mouse na pasta páginas > Adicionar > nova pasta.Right-click on the Pages folder > Add > New Folder.
  • Nomeie a pasta filmes.Name the folder Movies.

Clique com o botão direito do mouse na pasta páginas/filmes > Adicionar > novo item com Scaffold.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

Imagem das instruções anteriores.

Na caixa de diálogo Adicionar Scaffold , selecione Razor páginas usando Entity Framework (CRUD) > Adicionar.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

Imagem das instruções anteriores.

Conclua a caixa de diálogo Adicionar Razor páginas usando Entity Framework (CRUD) :Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

  • Na lista suspensa classe de modelo , selecione filme ( Razor PagesMovie. Models).In the Model class drop down, select Movie (RazorPagesMovie.Models).
  • Na linha classe de contexto de dados , selecione o + sinal de (adição) e altere o nome gerado de Razor PagesMovie.Modelos. Razor PagesMovieContext Razor PagesMovie.Dados. Razor PagesMovieContext.In the Data context class row, select the + (plus) sign and change the generated name from RazorPagesMovie.Models.RazorPagesMovieContext to RazorPagesMovie.Data.RazorPagesMovieContext. Esta alteração não é obrigatória.This change is not required. Ela cria a classe de contexto do banco de dados com o namespace correto.It creates the database context class with the correct namespace.
  • Selecione Adicionar.Select Add.

Imagem das instruções anteriores.

O appsettings.json arquivo é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.The appsettings.json file is updated with the connection string used to connect to a local database.

Arquivos criadosFiles created

O processo de scaffold cria e atualiza os arquivos a seguir:The scaffold process creates and updates the following files:

  • Páginas/filmes: criar, excluir, detalhes, editar e Index .Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/ Razor PagesMovieContext. csData/RazorPagesMovieContext.cs

AtualizadoUpdated

  • Startup.csStartup.cs

Os arquivos criados e atualizados são explicados na próxima seção.The created and updated files are explained in the next section.

Migração inicialInitial migration

Nesta seção, o PMC (Console de Gerenciador de Pacotes) é usado para:In this section, the Package Manager Console (PMC) is used to:

  • Adicionar uma migração inicial.Add an initial migration.
  • Atualize o banco de dados com a migração inicial.Update the database with the initial migration.

No menu ferramentas , selecione Gerenciador de pacotes NuGet > console do Gerenciador de pacotes.From the Tools menu, select NuGet Package Manager > Package Manager Console.

Menu do PMC

No PMC, insira os seguintes comandos:In the PMC, enter the following commands:

Add-Migration InitialCreate
Update-Database

Os comandos anteriores geram o seguinte aviso: "nenhum tipo foi especificado para a coluna decimal ' Price ' no tipo de entidade ' Movie '.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Isso fará com que valores sejam truncados silenciosamente se não couberem na precisão e na escala padrão.This will cause values to be silently truncated if they do not fit in the default precision and scale. Especifique explicitamente o tipo de coluna do SQL Server que pode acomodar todos os valores usando 'HasColumnType()'.”Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignore o aviso, pois ele será abordado em uma etapa posterior.Ignore the warning, as it will be addressed in a later step.

O comando migrações gera código para criar o esquema de banco de dados inicial.The migrations command generates code to create the initial database schema. O esquema é baseado no modelo especificado em DbContext .The schema is based on the model specified in DbContext. O argumento InitialCreate é usado para nomear as migrações.The InitialCreate argument is used to name the migrations. Qualquer nome pode ser usado, mas, por convenção, um nome que descreve a migração é selecionado.Any name can be used, but by convention a name is selected that describes the migration.

O update comando executa o Up método em migrações que não foram aplicadas.The update command runs the Up method in migrations that have not been applied. Nesse caso, update o executa o Up método no arquivo migrations/ <time-stamp> _InitialCreate. cs , que cria o banco de dados.In this case, update runs the Up method in Migrations/<time-stamp>_InitialCreate.cs file, which creates the database.

Examinar o contexto registrado com a injeção de dependênciaExamine the context registered with dependency injection

O ASP.NET Core é construído com a injeção de dependência.ASP.NET Core is built with dependency injection. Serviços, como o contexto de contexto de banco de dados EF Core, são registrados com injeção de dependência durante a inicialização do aplicativo.Services, such as the EF Core database context context, are registered with dependency injection during application startup. Os componentes que exigem esses serviços, como Razor páginas, são fornecidos a esses serviços por meio de parâmetros do construtor.Components that require these services, such as Razor Pages, are provided these services via constructor parameters. O código do construtor que obtém uma instância de contexto de contexto de banco de dados é mostrado posteriormente no tutorial.The constructor code that gets a database context context instance is shown later in the tutorial.

A ferramenta scaffolding criou automaticamente um contexto de contexto de banco de dados e o registrou com o contêiner de injeção de dependência.The scaffolding tool automatically created a database context context and registered it with the dependency injection container.

Examine o método Startup.ConfigureServices.Examine the Startup.ConfigureServices method. A linha destacada foi adicionada pelo scaffolder:The highlighted line was added by the scaffolder:

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

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

As RazorPagesMovieContext coordenadas EF Core funcionalidade, como criar, ler, atualizar e excluir, para o Movie modelo.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update and Delete, for the Movie model. O contexto de dados (RazorPagesMovieContext) deriva de Microsoft.EntityFrameworkCore.DbContext.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. O contexto de dados especifica quais entidades são incluídas no modelo de dados.The data context specifies which entities are included in the data model.

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 <Movie> DbSet para o conjunto de entidades.The preceding code creates a DbSet<Movie> property for the entity set. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados.In Entity Framework terminology, an entity set typically corresponds to a database table. Uma entidade corresponde a uma linha da tabela.An entity corresponds to a row in the table.

O nome da cadeia de conexão é passado para o contexto com a chamada de um método em um objeto DbContextOptions.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do appsettings.json arquivo.For local development, the Configuration system reads the connection string from the appsettings.json file.

Testar o aplicativoTest the app

  • Executar o aplicativo e acrescentar /Movies à URL no navegador (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

Se você obtiver o erro:If you get the error:

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

Você perdeu a etapa de migrações.You missed the migrations step.

  • Teste o link Criar.Test the Create link.

    Criar página

    Observação

    Talvez você não consiga inserir casas decimais ou vírgulas no campo Price.You may not be able to enter decimal commas in the Price field. Para dar suporte à validação do jQuery para localidades com idiomas diferentes do inglês que usam uma vírgula (",") para um ponto decimal e formatos de data diferentes do inglês dos EUA, o aplicativo precisa ser globalizado.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Para obter instruções sobre a globalização, consulte esse problema no GitHub.For globalization instructions, see this GitHub issue.

  • Teste os links Editar, Detalhes e Excluir.Test the Edit, Details, and Delete links.

O tutorial a seguir explica os arquivos criados por scaffolding.The next tutorial explains the files created by scaffolding.

Recursos adicionaisAdditional resources

Nesta seção, as classes são adicionadas para gerenciar filmes em um banco de dados SQLitede plataforma cruzada.In this section, classes are added for managing movies in a cross-platform SQLite database. Os aplicativos criados por meio de um modelo de ASP.NET Core usam um banco de dados SQLite.Apps created from an ASP.NET Core template use a SQLite database. As classes de modelo do aplicativo são usadas com Entity Framework Core (EF Core) (SQLite EF Core provedor de banco de dados) para trabalhar com o banco de dados.The app's model classes are used with Entity Framework Core (EF Core) (SQLite EF Core Database Provider) to work with the database. O EF Core é uma estrutura ORM (mapeamento relacional de objetos) que simplifica o acesso a dados.EF Core is an object-relational mapping (ORM) framework that simplifies data access.

As classes de modelo são conhecidas como classes POCO (de "objetos CLR básicos") porque não têm nenhuma dependência do EF Core.The model classes are known as POCO classes (from "plain-old CLR objects") because they don't have any dependency on EF Core. Elas definem as propriedades dos dados que são armazenados no banco de dados.They define the properties of the data that are stored in the database.

Exiba ou baixe o código de exemplo (como baixar).View or download sample code (how to download).

Adicionar um modelo de dadosAdd a data model

Clique com o botão direito do mouse no projeto Razor PagesMovie > Adicionar > nova pasta.Right-click the RazorPagesMovie project > Add > New Folder. Nomeie a pasta como Modelos.Name the folder Models.

Clique com o botão direito do mouse na pasta modelos .Right-click the Models folder. Selecione Adicionar > classe.Select Add > Class. Dê à classe o nome Movie.Name the class Movie.

Adicione as seguintes propriedades à classe Movie:Add the following properties to the Movie class:

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:The Movie class contains:

  • O campo ID é necessário para o banco de dados para a chave primária.The ID field is required by the database for the primary key.

  • [DataType(DataType.Date)]: O atributo DataType especifica o tipo dos dados ( Date ).[DataType(DataType.Date)]: The DataType attribute specifies the type of the data (Date). Com esse atributo:With this attribute:

    • O usuário não precisa inserir informações de tempo no campo de data.The user is not required to enter time information in the date field.
    • Somente a data é exibida, não as informações de tempo.Only the date is displayed, not time information.

DataAnnotations são abordados em um tutorial posterior.DataAnnotations are covered in a later tutorial.

Crie o projeto para verificar se não há erros de compilação.Build the project to verify there are no compilation errors.

Fazer scaffold do modelo de filmeScaffold the movie model

Nesta seção, é feito o scaffold do modelo de filme.In this section, the movie model is scaffolded. Ou seja, a ferramenta de scaffolding gera páginas para operações de CRUD (Criar, Ler, Atualizar e Excluir) para o modelo do filme.That is, the scaffolding tool produces pages for Create, Read, Update, and Delete (CRUD) operations for the movie model.

Crie uma pasta Pages/Movies:Create a Pages/Movies folder:

  • Clique com o botão direito do mouse na pasta páginas > Adicionar > nova pasta.Right-click on the Pages folder > Add > New Folder.
  • Nomeie a pasta filmes.Name the folder Movies.

Clique com o botão direito do mouse na pasta páginas/filmes > Adicionar > novo item com Scaffold.Right-click on the Pages/Movies folder > Add > New Scaffolded Item.

Imagem das instruções anteriores.

Na caixa de diálogo Adicionar Scaffold , selecione Razor páginas usando Entity Framework (CRUD) > Adicionar.In the Add Scaffold dialog, select Razor Pages using Entity Framework (CRUD) > Add.

Imagem das instruções anteriores.

Conclua a caixa de diálogo Adicionar Razor páginas usando Entity Framework (CRUD) :Complete the Add Razor Pages using Entity Framework (CRUD) dialog:

  • Na lista suspensa classe de modelo , selecione filme ( Razor PagesMovie. Models).In the Model class drop down, select Movie (RazorPagesMovie.Models).
  • Na linha classe de contexto de dados , selecione o + sinal de (adição) e aceite o nome gerado Razor PagesMovie. Models. Razor PagesMovieContext.In the Data context class row, select the + (plus) sign and accept the generated name RazorPagesMovie.Models.RazorPagesMovieContext.
  • Selecione Adicionar.Select Add.

Imagem das instruções anteriores.

O appsettings.json arquivo é atualizado com a cadeia de conexão usada para se conectar a um banco de dados local.The appsettings.json file is updated with the connection string used to connect to a local database.

O processo de scaffold cria e atualiza os arquivos a seguir:The scaffold process creates and updates the following files:

Arquivos criadosFiles created

  • Páginas/filmes: criar, excluir, detalhes, editar e Index .Pages/Movies: Create, Delete, Details, Edit, and Index.
  • Data/ Razor PagesMovieContext. csData/RazorPagesMovieContext.cs

Arquivo atualizadoFile updated

  • Startup.csStartup.cs

Os arquivos criados e atualizados são explicados na próxima seção.The created and updated files are explained in the next section.

Migração inicialInitial migration

Nesta seção, o PMC (Console de Gerenciador de Pacotes) é usado para:In this section, the Package Manager Console (PMC) is used to:

  • Adicionar uma migração inicial.Add an initial migration.
  • Atualize o banco de dados com a migração inicial.Update the database with the initial migration.

No menu ferramentas , selecione Gerenciador de pacotes NuGet > console do Gerenciador de pacotes.From the Tools menu, select NuGet Package Manager > Package Manager Console.

Menu do PMC

No PMC, insira os seguintes comandos:In the PMC, enter the following commands:

Add-Migration Initial
Update-Database

O comando Add-Migration gera código para criar o esquema de banco de dados inicial.The Add-Migration command generates code to create the initial database schema. O esquema é baseado no modelo especificado no DbContext , no arquivo Razor PagesMovieContext. cs .The schema is based on the model specified in the DbContext, in the RazorPagesMovieContext.cs file. O InitialCreate argumento é usado para nomear a migração.The InitialCreate argument is used to name the migration. Qualquer nome pode ser usado, mas, por convenção, um nome que descreve a migração é usado.Any name can be used, but by convention a name that describes the migration is used. Para obter mais informações, consulte Tutorial parte 5, aplicar migrações ao exemplo de Universidade da contoso.For more information, see Tutorial parte 5, aplicar migrações ao exemplo de Universidade da contoso.

O Update-Database comando executa o Up método no arquivo migrations/ <time-stamp> _InitialCreate. cs .The Update-Database command runs the Up method in the Migrations/<time-stamp>_InitialCreate.cs file. O método Up cria o banco de dados.The Up method creates the database.

Os comandos anteriores geram o seguinte aviso: "nenhum tipo foi especificado para a coluna decimal ' Price ' no tipo de entidade ' Movie '.The preceding commands generate the following warning: "No type was specified for the decimal column 'Price' on entity type 'Movie'. Isso fará com que valores sejam truncados silenciosamente se não couberem na precisão e na escala padrão.This will cause values to be silently truncated if they do not fit in the default precision and scale. Especifique explicitamente o tipo de coluna do SQL Server que pode acomodar todos os valores usando 'HasColumnType()'.”Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'."

Ignore o aviso, pois ele será abordado em uma etapa posterior.Ignore the warning, as it will be addressed in a later step.

Examinar o contexto registrado com a injeção de dependênciaExamine the context registered with dependency injection

O ASP.NET Core é construído com a injeção de dependência.ASP.NET Core is built with dependency injection. Serviços (como o contexto de contexto de banco de dados EF Core) são registrados com injeção de dependência durante a inicialização do aplicativo.Services (such as the EF Core database context context) are registered with dependency injection during application startup. Os componentes que exigem esses serviços (como Razor páginas) são fornecidos a esses serviços por meio de parâmetros do construtor.Components that require these services (such as Razor Pages) are provided these services via constructor parameters. O código do construtor que obtém uma instância de contexto contextB de contexto do banco de dados é mostrado posteriormente no tutorial.The constructor code that gets a database context contextB context instance is shown later in the tutorial.

A ferramenta scaffolding criou automaticamente um contexto de contexto de banco de dados e o registrou com o contêiner de injeção de dependência.The scaffolding tool automatically created a database context context and registered it with the dependency injection container.

Examine o método Startup.ConfigureServices.Examine the Startup.ConfigureServices method. A linha destacada foi adicionada pelo scaffolder:The highlighted line was added by the scaffolder:

// This method gets called by the runtime. 
// Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is 
        // needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

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

As RazorPagesMovieContext coordenadas EF Core funcionalidade, como criar, ler, atualizar e excluir, para o Movie modelo.The RazorPagesMovieContext coordinates EF Core functionality, such as Create, Read, Update, and Delete, for the Movie model. O contexto de dados (RazorPagesMovieContext) deriva de Microsoft.EntityFrameworkCore.DbContext.The data context (RazorPagesMovieContext) is derived from Microsoft.EntityFrameworkCore.DbContext. O contexto de dados especifica quais entidades são incluídas no modelo de dados.The data context specifies which entities are included in the data model.

using Microsoft.EntityFrameworkCore;

namespace RazorPagesMovie.Models
{
    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 <Movie> DbSet para o conjunto de entidades.The preceding code creates a DbSet<Movie> property for the entity set. Na terminologia do Entity Framework, um conjunto de entidades normalmente corresponde a uma tabela de banco de dados.In Entity Framework terminology, an entity set typically corresponds to a database table. Uma entidade corresponde a uma linha da tabela.An entity corresponds to a row in the table.

O nome da cadeia de conexão é passado para o contexto com a chamada de um método em um objeto DbContextOptions.The name of the connection string is passed in to the context by calling a method on a DbContextOptions object. Para o desenvolvimento local, o sistema de configuração lê a cadeia de conexão do appsettings.json arquivo.For local development, the Configuration system reads the connection string from the appsettings.json file.

Testar o aplicativoTest the app

  • Executar o aplicativo e acrescentar /Movies à URL no navegador (http://localhost:port/movies).Run the app and append /Movies to the URL in the browser (http://localhost:port/movies).

Se você obtiver o erro:If you get the error:

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

Você perdeu a etapa de migrações.You missed the migrations step.

  • Teste o link Criar.Test the Create link.

    Criar página

    Observação

    Talvez você não consiga inserir casas decimais ou vírgulas no campo Price.You may not be able to enter decimal commas in the Price field. Para dar suporte à validação do jQuery para localidades com idiomas diferentes do inglês que usam uma vírgula (",") para um ponto decimal e formatos de data diferentes do inglês dos EUA, o aplicativo precisa ser globalizado.To support jQuery validation for non-English locales that use a comma (",") for a decimal point and for non US-English date formats, the app must be globalized. Para obter instruções sobre a globalização, consulte esse problema no GitHub.For globalization instructions, see this GitHub issue.

  • Teste os links Editar, Detalhes e Excluir.Test the Edit, Details, and Delete links.

O tutorial a seguir explica os arquivos criados por scaffolding.The next tutorial explains the files created by scaffolding.

Recursos adicionaisAdditional resources