Compatibilidad con enumeración - Code First

Nota:

Solo EF5 y versiones posteriores: las características, API, etc. tratadas en esta página se han incluido a partir de Entity Framework 5. Si usa una versión anterior, no se aplica parte o la totalidad de la información.

En este vídeo y tutorial paso a paso se muestra cómo usar tipos de enumeración con Entity Framework Code First. También muestra cómo usar enumeraciones en una consulta LINQ.

En este tutorial se usará Code First para crear una nueva base de datos, pero también puede usar Code First para asignar a una base de datos existente.

La compatibilidad con enumeración se introdujo en Entity Framework 5. Para usar las nuevas características como enumeraciones, tipos de datos espaciales y funciones con valores de tabla, debe tener como destino .NET Framework 4.5. Visual Studio 2012 usa .NET 4.5 como destino de forma predeterminada.

En Entity Framework, una enumeración puede tener los siguientes tipos subyacentes: Byte, Int16, Int32, Int64 o SByte.

Ver el vídeo

En este vídeo se muestra cómo usar tipos de enumeración con Code First de Entity Framework. También muestra cómo usar enumeraciones en una consulta LINQ.

Presentado por: Julia Kornich

Vídeo: WMV | MP4 | WMV (ZIP)

Requisitos previos

Tendrá que tener instalada la edición Visual Studio 2012, Ultimate, Premium, Professional o Web Express para completar este tutorial.

 

Configuración del proyecto

  1. Abra Visual Studio 2012
  2. En el menú Archivo, elija Nuevo y haga clic en Proyecto
  3. En el panel izquierdo, haga clic en Visual C#y, luego, seleccione la plantilla Consola
  4. Escriba EnumCodeFirst como nombre del proyecto y haga clic en Aceptar

Definir un nuevo modelo mediante Code First

Al usar el desarrollo de Code First, normalmente comienza escribiendo clases de .NET Framework que definen el modelo conceptual (dominio). El código siguiente define la clase Department.

El código también define la enumeración DepartmentNames. De forma predeterminada, la enumeración es de tipo int. La propiedad Name de la clase Department es del tipo DepartmentNames.

Abra el archivo Program.cs y pegue las siguientes definiciones de clases.

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 el tipo derivado de DbContext

Además de definir entidades, debe definir una clase que derive de DbContext y exponga las propiedades DbSet<TEntity>. Las propiedades DbSet<TEntity> permiten que el contexto sepa qué tipos desea incluir en el modelo.

Una instancia del tipo derivado de DbContext administra los objetos de entidad durante el tiempo de ejecución, lo que incluye rellenar los objetos con datos de una base de datos, el seguimiento de cambios y la persistencia de datos en la base de datos.

Los tipos DbContext y DbSet se definen en el ensamblado de EntityFramework. Agregaremos una referencia a este archivo DLL mediante el paquete EntityFramework NuGet.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto.
  2. Seleccione Administrar paquetes NuGet…
  3. En el cuadro de diálogo Administrar paquetes NuGet, seleccione la pestaña En línea y elija el paquete EntityFramework.
  4. Haz clic en Instalar

Tenga en cuenta que, además del ensamblado EntityFramework, también se agregan referencias a los ensamblados System.ComponentModel.DataAnnotations y System.Data.Entity.

En la parte superior del archivo Program.cs, agregue la siguiente instrucción using:

using System.Data.Entity;

En Program.cs, agregue la definición de contexto. 

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

 

Conservar y recuperar datos

Abra el archivo Program.cs donde se define el método Main. Agregue el código siguiente a la función Main. El código agrega un nuevo objeto Department al contexto. A continuación, guarda los datos. El código también ejecuta una consulta LINQ que devuelve un departamento donde el nombre es 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 y ejecute la aplicación. El programa produce el siguiente resultado:

DepartmentID: 1 Name: English

 

Visualizar la base de datos generada

Al ejecutar la aplicación por primera vez, Entity Framework crea una base de datos automáticamente. Dado que tenemos instalado Visual Studio 2012, la base de datos se creará en la instancia de LocalDB. De forma predeterminada, Entity Framework asigna un nombre a la base de datos según el nombre completo del contexto derivado (en este ejemplo es EnumCodeFirst.EnumTestContext). Las veces siguientes se utilizará la base de datos existente.  

Tenga en cuenta que, si realiza algún cambio en el modelo después de crear la base de datos, debe usar Migraciones de Code First para actualizar el esquema de la base de datos. Consulte Code First a una nueva base de datos para ver un ejemplo de uso de migraciones.

Para ver la base de datos y los datos, haga lo siguiente:

  1. En el menú principal de Visual Studio 2012, seleccione Ver ->Explorador de objetos de SQL Server.
  2. Si LocalDB no está en la lista de servidores, haga clic con el botón derecho en SQL Server y seleccione Agregar SQL Server Usar la autenticación de Windows predeterminada para conectarse a la instancia LocalDB
  3. Expanda el nodo LocalDB
  4. Despliegue la carpeta Databases para ver la nueva base de datos y vaya a la tabla Department. Tenga en cuenta que Code First no crea una tabla que se asigne al tipo de enumeración
  5. Para ver los datos, haga clic con el botón derecho en la tabla y seleccione Ver datos

Resumen

En este tutorial hemos visto cómo usar tipos espaciales con Code First de Entity Framework.