Compartilhar via


Suporte à enumeração - Code First

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 Entity Framework. Ele também demonstra como usar enumerações em uma consulta LINQ.

Esse passo a passo usará o Code First para criar um novo banco de dados, mas você também pode usar o Code 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 Code First 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 EnumCodeFirst como o nome do projeto e clique em OK

Definir um novo modelo usando o Code First

Ao usar o desenvolvimento Code First, você geralmente começa escrevendo classes do .NET Framework que definem seu modelo conceitual (domínio). O código a seguir define a classe Departament.

O código também define a enumeração DepartmentNames. Por padrão, a enumeração é de tipo int. A propriedade Name na classe Department é do tipo DepartmentNames.

Abra o arquivo Program.cs e cole as definições de classe a seguir.

public enum DepartmentNames
{
    English,
    Math,
    Economics
}     

public partial class Department
{
    public int DepartmentID { get; set; }
    public DepartmentNames Name { get; set; }
    public decimal Budget { get; set; }
}

 

Definir o tipo derivado de DbContext

Além de definir entidades, você precisa definir uma classe que deriva de DbContext e expõe as propriedades DbSet<TEntity>. As propriedades DbSet<TEntity> informam ao contexto quais tipos você deseja incluir no modelo.

Uma instância do tipo derivado DbContext gerencia os objetos de entidade durante o tempo de execução, o que inclui preencher objetos com dados de um banco de dados, controle de alterações e persistência de dados no banco de dados.

Os tipos DbContext e DbSet são definidos no assembly EntityFramework. Adicionaremos uma referência a essa DLL usando o pacote NuGet EntityFramework.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto.
  2. Selecione Gerenciar Pacotes NuGet...
  3. Na caixa de diálogo Gerenciar Pacotes NuGet, selecione a guia Online e escolha o pacote EntityFramework.
  4. Clique em Instalar

Observe que, além do assembly EntityFramework, as referências aos assemblies System.ComponentModel.DataAnnotations e System.Data.Entity também são adicionadas.

Na parte superior do arquivo Program.cs, adicione a seguinte instrução using:

using System.Data.Entity;

No Program.cs, adicione a definição de contexto. 

public partial class EnumTestContext : DbContext
{
    public DbSet<Department> Departments { get; set; }
}

 

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 EnumTestContext())
{
    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} Name: {1}",
        department.DepartmentID,  
        department.Name);
}

Compile e execute o aplicativo. O programa produz a seguinte saída:

DepartmentID: 1 Name: English

 

Exibir o banco de dados gerado

Quando você executa o aplicativo pela primeira vez, o Entity Framework cria um banco de dados para você. Como temos o Visual Studio 2012 instalado, o banco de dados será criado na instância do LocalDB. Por padrão, o Entity Framework nomeia o banco de dados após o nome totalmente qualificado do contexto derivado (para este exemplo que é EnumCodeFirst.EnumTestContext). As horas subsequentes em que o banco de dados existente será usado.  

Observe que, se você fizer alterações no modelo após a criação do banco de dados, deverá usar as Migrações do Code First para atualizar o esquema de banco de dados. Consulte Code First para um Novo Banco de Dados para obter um exemplo de como usar migrações.

Para exibir o banco de dados e os dados, faça o seguinte:

  1. No menu principal do Visual Studio 2012, selecione Exibir ->Pesquisador de Objetos do SQL Server.
  2. Se o LocalDB não estiver na lista de servidores, clique no botão direito do mouse no SQL Server e selecione Adicionar SQL Server Use a Autenticação padrão do Windows para se conectar à instância do LocalDB
  3. Expandir o nó LocalDB
  4. Desdobre a pasta Bancos de Dados para ver o novo banco de dados e navegue até a tabela Departamento. Observe que o Code First não cria uma tabela mapeada para o tipo de enumeração
  5. Clique com o botão direito do mouse na tabela e selecione Exibir dados

Resumo

Nesse passo a passo, analisamos como usar tipos de enumeração com o Code First do Entity Framework.