Share via


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

Video: WMV | MP4 | WMV (ZIP)

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

  1. Abra o Visual Studio 2012
  2. No menu Arquivo, aponte para Novo e clique em Projeto
  3. No painel esquerdo, clique em Visual C#e selecione o modelo de Console
  4. Insira EnumEFDesigner como o nome do projeto e clique em OK

Criar um novo modelo usando o Designer EF

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto, aponte para Adicionar e selecione Novo Item
  2. Selecione Dados no menu à esquerda e selecione Modelo de Dados de Entidade ADO.NET no painel Modelos
  3. Insira EnumTestModel.edmx para o nome do arquivo e clique em Adicionar
  4. Na página Assistente de Modelo de Dados de Entidade, selecione Modelo Vazio na caixa de diálogo Escolher Conteúdo do Modelo
  5. 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

  1. 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
  2. Especifique o Department para o nome do tipo e especifique o DepartmentID para o nome da propriedade chave, deixe o tipo como Int32
  3. Clique em OK
  4. Clique com o botão direito do mouse na entidade e selecione Adicionar Novo –> Propriedade Escalar
  5. Renomear a nova propriedade para Nome
  6. 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
  7. Adicione outra propriedade escalar e renomeie-a como Orçamento, altere o tipo para Decimal

Adicione um tipo de enumeração

  1. No Designer do Entity Framework, clique com o botão direito do mouse na propriedade Name, selecione Converter em enumeração

    Convert To Enum

  2. 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

    Add Enum Type

  3. Pressione OK

  4. 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.

Model Browser

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.

  1. 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
  2. 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
  3. Uma caixa de diálogo perguntando se deseja criar um novo banco de dados será exibida, selecione Sim.
  4. 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
  5. Selecione Concluir, ao selecionar Concluir não executa o script da DDL.
  6. 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
  7. 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
  8. 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.