Suporte à enumeração – Designer EF
Observação
Apenas a partir do EF5 : os recursos, as APIs etc. discutidos nessa página foram introduzidos no Entity Framework 5. Se você estiver usando uma versão anterior, algumas ou todas as informações não se aplicarão.
Esse vídeo e passo a passo mostram como usar tipos de enumeração com o Code First do Designer do Entity Framework. Ele também demonstra como usar enumerações em uma consulta LINQ.
Este passo a passo usará o Model First para criar um novo banco de dados, mas o Designer de EF também poderá usado com o fluxo de trabalho Database First para mapear para um banco de dados existente.
O suporte à enumeração foi introduzido no Entity Framework 5. Para usar os novos recursos, como enumerações, tipos de dados espaciais e funções com valor de tabela, você deve direcionar o .NET Framework 4.5. O Visual Studio 2012 tem como destino o .NET 4.5 por padrão.
No Entity Framework, uma enumeração pode ter os seguintes tipos subjacentes: Byte, Int16, Int32, Int64 ou SByte.
Assista ao vídeo
Esse vídeo mostra como usar tipos de enumeração com o Designer do Entity Framework. Ele também demonstra como usar enumerações em uma consulta LINQ.
Apresentado por: Julia Kornich
Pré-Requisitos
Você precisará ter o Visual Studio 2012, Ultimate, Premium, Professional ou Web Express Edition instalado para concluir esse passo a passo.
Configurar o Projeto
- Abra o Visual Studio 2012
- No menu Arquivo, aponte para Novo e clique em Projeto
- No painel esquerdo, clique em Visual C#e selecione o modelo de Console
- Insira EnumEFDesigner como o nome do projeto e clique em OK
Criar um novo modelo usando o Designer EF
- No Gerenciador de Soluções, clique com o botão direito do mouse no projeto, aponte para Adicionar e selecione Novo Item
- Selecione Dados no menu à esquerda e selecione Modelo de Dados de Entidade ADO.NET no painel Modelos
- Insira EnumTestModel.edmx para o nome do arquivo e clique em Adicionar
- Na página Assistente de Modelo de Dados de Entidade, selecione Modelo Vazio na caixa de diálogo Escolher Conteúdo do Modelo
- Clique em Concluir
O Designer do Entity, que fornece uma superfície de design para editar seu modelo, é exibido.
O assistente executa as seguintes ações:
- Gera o arquivo EnumTestModel.edmx que define o modelo conceitual, o modelo de armazenamento e o mapeamento entre eles. Define a propriedade Processamento de Artefatos de Metadados do arquivo .edmx como Inserir no Assembly de Saída, para que os arquivos de metadados gerados sejam inseridos no assembly.
- Adiciona uma referência aos seguintes assemblies: EntityFramework, System.ComponentModel.DataAnnotations e System.Data.Entity.
- Cria arquivos EnumTestModel.tt e EnumTestModel.Context.tt e os adiciona no arquivo .edmx. Esses arquivos de modelo T4 geram o código que define o tipo derivado de DbContext e os tipos POCO que são mapeados para as entidades no modelo .edmx.
Adicionar um novo tipo de entidade
- Clique com o botão direito do mouse em uma área vazia da superfície de design, selecione Adicionar –> Entidade, a caixa de diálogo Nova Entidade será exibida
- Especifique o Department para o nome do tipo e especifique o DepartmentID para o nome da propriedade chave, deixe o tipo como Int32
- Clique em OK
- Clique com o botão direito do mouse na entidade e selecione Adicionar Novo –> Propriedade Escalar
- Renomear a nova propriedade para Nome
- Altere o tipo da nova propriedade para Int32 (por padrão, a nova propriedade é do tipo String). Para alterar o tipo, abra a janela Propriedades e altere a propriedade Type para Int32
- Adicione outra propriedade escalar e renomeie-a como Orçamento, altere o tipo para Decimal
Adicione um tipo de enumeração
No Designer do Entity Framework, clique com o botão direito do mouse na propriedade Name, selecione Converter em enumeração
Na caixa de diálogo Adicionar Enumeração, digite DepartmentNames para o Nome do Tipo de Enumeração, altere o Tipo Subjacente para Int32e adicione os seguintes membros ao tipo: Inglês, Matemática e Economia
Pressione OK
Salve o modelo e compile o projeto
Observação
Ao compilar, talvez sejam exibidos avisos sobre entidades e associações não mapeadas na Lista de Erros. Ignore esses avisos, porque depois que optarmos por gerar o banco de dados com base no modelo, os erros desaparecerão.
Se você examinar a janela Propriedades, observará que o tipo da propriedade Name foi alterado para DepartmentNames e o tipo de enumeração recém-adicionado foi adicionado à lista de tipos.
Se você alternar para a janela do Navegador do Modelo, verá que o tipo também foi adicionado ao nó Tipos Enumerados.
Observação
Você também pode adicionar novos tipos enumerados nessa janela clicando no botão direito do mouse e selecionando Adicionar Tipo Enumerado. Depois que o tipo for criado, ele aparecerá na lista de tipos e você poderá associar a uma propriedade
Gerar banco de dados a partir do modelo
Agora podemos gerar um banco de dados baseado no modelo.
- Clique com o botão direito do mouse em um espaço vazio na superfície do Designer de Entidade e selecione Gerar Banco de Dados a partir do Modelo
- A caixa de diálogo Escolher a Conexão de Dados do Assistente para Gerar Banco de Dados é exibida, selecione Nova Conexão especifique (localdb)\mssqllocaldb para o nome do servidor e EnumTest para o banco de dados e selecione OK
- Uma caixa de diálogo perguntando se deseja criar um novo banco de dados será exibida, selecione Sim.
- Selecione Avançar e o Assistente para Criar Banco de Dados gera a DDL (linguagem de definição de dados), para criar um banco de dados. A DDL gerada é exibida na caixa de diálogo Resumo e Configurações, observe que a DDL não contém uma definição para uma tabela mapeada para o tipo de enumeração
- Selecione Concluir, ao selecionar Concluir não executa o script da DDL.
- O Assistente para Criar Banco de Dados faz o seguinte: Abre o EnumTest.edmx.sql no Editor T-SQL. Gera o esquema do repositório e as seções de mapeamento do arquivo EDMX. Adiciona informações de cadeia de conexão ao arquivo App.config
- Clique com o botão direito do mouse no Editor do T-SQL e selecione Executar A caixa de diálogo Conectar ao Servidor é exibida, insira as informações de conexão da etapa 2 e selecione Conectar
- Para exibir o esquema gerado, clique com o botão direito do mouse no nome do banco de dados no Pesquisador de Objetos do SQL Server e selecione Atualizar
Persistir e recuperar dados
Abra o arquivo Program.cs em que o método Principal está definido. Adicione o código a seguir à função Principal. O código adiciona um novo objeto Department ao contexto. Em seguida, ele salva os dados. O código também executa uma consulta LINQ que retorna um Departamento em que o nome é DepartmentNames.English.
using (var context = new EnumTestModelContainer())
{
context.Departments.Add(new Department{ Name = DepartmentNames.English });
context.SaveChanges();
var department = (from d in context.Departments
where d.Name == DepartmentNames.English
select d).FirstOrDefault();
Console.WriteLine(
"DepartmentID: {0} and Name: {1}",
department.DepartmentID,
department.Name);
}
Compile e execute o aplicativo. O programa produz a seguinte saída:
DepartmentID: 1 Name: English
Para exibir dados no banco de dados, clique com o botão direito do mouse no nome do banco de dados no Pesquisador de Objetos do SQL Server e selecione Atualizar. Em seguida, clique no botão direito do mouse na tabela e selecione Exibir dados.
Resumo
Neste passo a passo, analisamos como mapear tipos enumerados usando o Entity Framework Designer e como usar enumerações no código.