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.