Tutorial: Aprimorar a validação de dados para o Banco de Dados EF Primeiro com ASP.NET aplicativo MVC

Usando MVC, Entity Framework e ASP.NET Scaffolding, você pode criar um aplicativo Web que fornece uma interface para um banco de dados existente. Esta série de tutoriais mostra como gerar automaticamente o código que permite que os usuários exibam, editem, criem e excluam dados que residem em uma tabela de banco de dados. O código gerado corresponde às colunas na tabela de banco de dados.

Este tutorial se concentra em adicionar anotações de dados ao modelo de dados para especificar os requisitos de validação e exibir a formatação. Ele foi aprimorado com base nos comentários dos usuários na seção de comentários.

Neste tutorial, você:

  • Adicionar anotações de dados
  • Adicionar classes de metadados

Pré-requisitos

Adicionar anotações de dados

Como você viu em um tópico anterior, algumas regras de validação de dados são aplicadas automaticamente à entrada do usuário. Por exemplo, você só pode fornecer um número para a propriedade Grade. Para especificar mais regras de validação de dados, você pode adicionar anotações de dados à classe de modelo. Essas anotações são aplicadas em todo o aplicativo Web para a propriedade especificada. Você também pode aplicar atributos de formatação que alteram a forma como as propriedades são exibidas; por exemplo, alterando o valor usado para rótulos de texto.

Neste tutorial, você adicionará anotações de dados para restringir o comprimento dos valores fornecidos para as propriedades FirstName, LastName e MiddleName. No banco de dados, esses valores são limitados a 50 caracteres; no entanto, em seu aplicativo Web, esse limite de caracteres não é imposto no momento. Se um usuário fornecer mais de 50 caracteres para um desses valores, a página falhará ao tentar salvar o valor no banco de dados. Você também restringirá Grade a valores entre 0 e 4.

Selecione Modelos>ContosoModel.edmx>ContosoModel.tt e abra o arquivo Student.cs . Adicione o código realçado a seguir à classe .

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Student
    {
        public Student()
        {
            this.Enrollments = new HashSet<Enrollment>();
        }
    
        public int StudentID { get; set; }
        [StringLength(50)]
        public string LastName { get; set; }
        [StringLength(50)]
        public string FirstName { get; set; }
        public Nullable<System.DateTime> EnrollmentDate { get; set; }
        [StringLength(50)]
        public string MiddleName { get; set; }
    
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

Abra Enrollment.cs e adicione o código realçado a seguir.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Enrollment
    {
        public int EnrollmentID { get; set; }
        [Range(0, 4)]
        public Nullable<decimal> Grade { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
    
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
}

Compile a solução.

Clique em Lista de alunos e selecione Editar. Se você tentar inserir mais de 50 caracteres, uma mensagem de erro será exibida.

mostrar mensagem de erro

Voltar para a home page. Clique em Lista de registros e selecione Editar. Tente fornecer uma nota acima de 4. Você receberá este erro: a nota do campo deve estar entre 0 e 4.

Adicionar classes de metadados

A adição dos atributos de validação diretamente à classe de modelo funciona quando você não espera que o banco de dados seja alterado; no entanto, se o banco de dados for alterado e você precisar regenerar a classe de modelo, você perderá todos os atributos aplicados à classe de modelo. Essa abordagem pode ser muito ineficiente e propensa a perder regras de validação importantes.

Para evitar esse problema, você pode adicionar uma classe de metadados que contém os atributos. Quando você associa a classe de modelo à classe de metadados, esses atributos são aplicados ao modelo. Nessa abordagem, a classe de modelo pode ser regenerada sem perder todos os atributos que foram aplicados à classe de metadados.

Na pasta Modelos , adicione uma classe chamada Metadata.cs.

Substitua o código em Metadata.cs pelo código a seguir.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    public class StudentMetadata
    {
        [StringLength(50)]
        [Display(Name="Last Name")]
        public string LastName;

        [StringLength(50)]
        [Display(Name="First Name")]
        public string FirstName;

        [StringLength(50)]
        [Display(Name="Middle Name")]
        public string MiddleName;

        [Display(Name = "Enrollment Date")]
        public Nullable<System.DateTime> EnrollmentDate;
    }

    public class EnrollmentMetadata
    {
        [Range(0, 4)]
        public Nullable<decimal> Grade;
    }
}

Essas classes de metadados contêm todos os atributos de validação que você havia aplicado anteriormente às classes de modelo. O atributo Display é usado para alterar o valor usado para rótulos de texto.

Agora, você deve associar as classes de modelo às classes de metadados.

Na pasta Modelos , adicione uma classe chamada PartialClasses.cs.

Substitua o conteúdo do arquivo pelo código a seguir.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    [MetadataType(typeof(EnrollmentMetadata))]
    public partial class Enrollment
    {
    }
}

Observe que cada classe é marcada como uma partial classe e cada uma corresponde ao nome e ao namespace como a classe gerada automaticamente. Aplicando o atributo de metadados à classe parcial, verifique se os atributos de validação de dados serão aplicados à classe gerada automaticamente. Esses atributos não serão perdidos quando você regenerar as classes de modelo porque o atributo de metadados é aplicado em classes parciais que não são regeneradas.

Para regenerar as classes geradas automaticamente, abra o arquivo ContosoModel.edmx . Mais uma vez, clique com o botão direito do mouse na superfície de design e selecione Atualizar Modelo no Banco de Dados. Mesmo que você não tenha alterado o banco de dados, esse processo regenerará as classes. Na guia Atualizar , selecione Tabelas e Concluir.

Salve o arquivo ContosoModel.edmx para aplicar as alterações.

Abra o arquivo Student.cs ou o arquivo Enrollment.cs e observe que os atributos de validação de dados aplicados anteriormente não estão mais no arquivo. No entanto, execute o aplicativo e observe que as regras de validação ainda são aplicadas quando você insere dados.

Conclusão

Esta série forneceu um exemplo simples de como gerar código de um banco de dados existente que permite que os usuários editem, atualizem, criem e excluam dados. Ele usou ASP.NET MVC 5, Entity Framework e ASP.NET Scaffolding para criar o projeto.

Para obter um exemplo introdutório de desenvolvimento do Code First, consulte Introdução com ASP.NET MVC 5.

Para obter um exemplo mais avançado, consulte Criando um modelo de dados do Entity Framework para um aplicativo ASP.NET MVC 4. Observe que a API DbContext que você usa para trabalhar com dados no Database First é a mesma que a API que você usa para trabalhar com dados no Code First. Mesmo que você pretenda usar o Database First, saiba como lidar com cenários mais complexos, como ler e atualizar dados relacionados, lidar com conflitos de simultaneidade e assim por diante em um tutorial do Code First. A única diferença está em como as classes de banco de dados, classe de contexto e entidade são criadas.

Recursos adicionais

Para obter uma lista completa de anotações de validação de dados que você pode aplicar a propriedades e classes, consulte System.ComponentModel.DataAnnotations.

Próximas etapas

Neste tutorial, você:

  • Adição de anotações de dados
  • Classes de metadados adicionadas

Para saber como implantar um aplicativo Web e um banco de dados SQL no Serviço de Aplicativo do Azure, confira este tutorial: