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
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 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.
- No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto.
- Selecione Gerenciar Pacotes NuGet...
- Na caixa de diálogo Gerenciar Pacotes NuGet, selecione a guia Online e escolha o pacote EntityFramework.
- 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:
- No menu principal do Visual Studio 2012, selecione Exibir ->Pesquisador de Objetos do SQL Server.
- 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
- Expandir o nó LocalDB
- 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
- 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.