Entity Framework - Suporte Enum

No Entity Framework, esse recurso permitirá que você defina uma propriedade em uma classe de domínio que seja um tipo de enum e mapeie-a para uma coluna de banco de dados de um tipo inteiro. O Entity Framework converterá então o valor do banco de dados de e para o enum relevante conforme ele consulta e salva os dados.

  • Os tipos enumerados têm todos os tipos de benefícios ao trabalhar com propriedades que têm um número fixo de respostas.

  • A segurança e a confiabilidade de um aplicativo aumentam quando você usa enumerações.

  • A enumeração torna muito mais difícil para o usuário cometer erros e problemas como ataques de injeção são inexistentes.

  • No Entity Framework, uma enumeração pode ter os seguintes tipos subjacentes -

    • Byte
    • Int16
    • Int32
    • Int64
    • SByte
  • O tipo subjacente padrão dos elementos de enumeração é int.

  • Por padrão, o primeiro enumerador tem o valor 0 e o valor de cada enumerador sucessivo é aumentado em 1.

Vamos dar uma olhada no exemplo a seguir, no qual criaremos uma entidade no designer e adicionaremos algumas propriedades.

Step 1 - Crie um novo projeto a partir da opção de menu Arquivo → Novo → Projeto.

Step 2 - No painel esquerdo, selecione o aplicativo de console.

Step 3 - Insira EFEnumDemo como o nome do projeto e clique em OK.

Step 4 - Clique com o botão direito do mouse no nome do projeto no Solution Explorer e selecione a opção de menu Adicionar → Novo item.

Step 5 - Selecione ADO.NET Entity Data Model no painel Templates.

Step 6 - Digite EFEnumModel.edmx para o nome do arquivo e clique em Adicionar.

Step 7 - Na página Entity Data Model Wizard, selecione Empty EF designer Model.

Step 8 - Clique em Concluir

Step 9 - Clique com o botão direito na janela do designer e selecione Adicionar → Entidade.

A caixa de diálogo Nova Entidade é exibida conforme mostrado na imagem a seguir.

Step 10 - Digite Department como um nome de entidade e DeptID como um nome de propriedade, deixe o tipo de propriedade como Int32 e clique em OK.

Step 11 - Clique com o botão direito na entidade e selecione Adicionar Novo → Propriedade Escalar.

Step 12 - Renomeie a nova propriedade para DeptName.

Step 13 - Altere o tipo da nova propriedade para Int32 (por padrão, a nova propriedade é do tipo String).

Step 14 - Para alterar o tipo, abra a janela Propriedades e altere a propriedade Type para Int32.

Step 15 - No Entity Framework Designer, clique com o botão direito do mouse na propriedade Name e selecione Converter em enum.

Step 16 - Na caixa de diálogo Adicionar tipo de Enum, insira DepartmentNames para o nome de tipo de Enum, altere o tipo subjacente para Int32 e, em seguida, adicione os seguintes membros ao tipo: Physics, Chemistry, Computer e Economics.

Step 17 - Clique em Ok.

Se você alternar para a janela Model Browser, verá que o tipo também foi adicionado ao nó Enum Types.

Vamos gerar banco de dados a partir do modelo, seguindo todas as etapas mencionadas no capítulo de abordagem Model First.

Step 1 - Clique com o botão direito na superfície do Entity Designer e selecione Generate Database from Model.

A caixa de diálogo Choose Your Data Connection do Generate Database Wizard é exibida.

Step 2 - Clique no botão Nova conexão.

Step 3 - Insira o nome do servidor e EnumDemo para o banco de dados e clique em OK.

Step 4 - Uma caixa de diálogo perguntando se você deseja criar um novo banco de dados aparecerá, clique em Sim.

Step 5- Clique em Avançar e o Assistente para Criar Banco de Dados gera a linguagem de definição de dados (DDL) para a criação de um banco de dados. Agora clique em Concluir.

Step 6 - Clique com o botão direito do mouse em T-SQL Editor e selecione Executar.

Step 7 - Para visualizar o esquema gerado, clique com o botão direito do mouse no nome do banco de dados no SQL Server Object Explorer e selecione Atualizar.

Você verá a tabela Departments no banco de dados.

Vamos dar uma olhada no exemplo a seguir, no qual alguns novos objetos Department para o contexto são adicionados e salvos. E então recupere o departamento de informática.

class Program {

   static void Main(string[] args) {

      using (var context = new EFEnumModelContainer()) {

         context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});

         context.SaveChanges();

         var department = (
            from d in context.Departments
            where d.DeptName == DepartmentNames.Computer
            select d
         ).FirstOrDefault();

         Console.WriteLine(
            "Department ID: {0}, Department Name: {1}", 
               department.DeptID, department.DeptName
         );

         Console.ReadKey();
      }
   }
}

Quando o código acima for executado, você receberá a seguinte saída -

Department ID: 2, Department Name: Computer

Recomendamos que você execute o exemplo acima passo a passo para melhor compreensão.