Entity Framework: compatibilidad con Enum

En Entity Framework, esta característica le permitirá definir una propiedad en una clase de dominio que es un tipo de enumeración y asignarla a una columna de base de datos de un tipo entero. Entity Framework convertirá el valor de la base de datos hacia y desde la enumeración relevante a medida que consulta y guarda datos.

  • Los tipos enumerados tienen todo tipo de beneficios cuando se trabaja con propiedades que tienen un número fijo de respuestas.

  • La seguridad y la confiabilidad de una aplicación aumentan cuando usa enumeraciones.

  • La enumeración hace que sea mucho más difícil para el usuario cometer errores, y problemas como los ataques de inyección son inexistentes.

  • En Entity Framework, una enumeración puede tener los siguientes tipos subyacentes:

    • Byte
    • Int16
    • Int32
    • Int64
    • SByte
  • El tipo subyacente predeterminado de los elementos de enumeración es int.

  • De forma predeterminada, el primer enumerador tiene el valor 0 y el valor de cada enumerador sucesivo aumenta en 1.

Echemos un vistazo al siguiente ejemplo en el que crearemos una entidad en el diseñador y luego agregaremos algunas propiedades.

Step 1 - Crear nuevo proyecto desde Archivo → Nuevo → Opción de menú Proyecto.

Step 2 - En el panel izquierdo, seleccione la Aplicación de consola.

Step 3 - Introduzca EFEnumDemo como nombre del proyecto y haga clic en Aceptar.

Step 4 - Haga clic con el botón derecho en el nombre del proyecto en el Explorador de soluciones y seleccione la opción de menú Agregar → Nuevo elemento.

Step 5 - Seleccione Modelo de datos de entidad ADO.NET en el panel Plantillas.

Step 6 - Ingrese EFEnumModel.edmx como nombre de archivo y luego haga clic en Agregar.

Step 7 - En la página del Asistente de modelo de datos de entidad, seleccione Modelo de diseñador de EF vacío.

Step 8 - Haga clic en Finalizar

Step 9 - Luego haga clic derecho en la ventana del diseñador y seleccione Agregar → Entidad.

El cuadro de diálogo Nueva entidad aparece como se muestra en la siguiente imagen.

Step 10 - Ingrese Departamento como nombre de entidad y DeptID como nombre de propiedad, deje el tipo de propiedad como Int32 y haga clic en Aceptar.

Step 11 - Haga clic con el botón derecho en la entidad y seleccione Agregar nuevo → Propiedad escalar.

Step 12 - Cambie el nombre de la nueva propiedad a DeptName.

Step 13 - Cambie el tipo de la nueva propiedad a Int32 (por defecto, la nueva propiedad es de tipo String).

Step 14 - Para cambiar el tipo, abra la ventana Propiedades y cambie la propiedad Tipo a Int32.

Step 15 - En Entity Framework Designer, haga clic con el botón derecho en la propiedad Nombre, seleccione Convertir en enumeración.

Step 16 - En el cuadro de diálogo Agregar tipo de enumeración, ingrese DepartmentNames para el Nombre del tipo de enumeración, cambie el Tipo subyacente a Int32 y luego agregue los siguientes miembros al tipo: Física, Química, Computación y Economía.

Step 17 - Haga clic en Aceptar.

Si cambia a la ventana Explorador de modelos, verá que el tipo también se agregó al nodo Tipos de enumeración.

Generemos una base de datos a partir del modelo siguiendo todos los pasos mencionados en el capítulo de enfoque Modelo Primero.

Step 1 - Haga clic con el botón derecho en la superficie de Entity Designer y seleccione Generar base de datos a partir del modelo.

Se muestra el cuadro de diálogo Elija su conexión de datos del Asistente para generar base de datos.

Step 2 - Haga clic en el botón Nueva conexión.

Step 3 - Ingrese el nombre del servidor y EnumDemo para la base de datos y haga clic en Aceptar.

Step 4 - Aparecerá un cuadro de diálogo que le preguntará si desea crear una nueva base de datos, haga clic en Sí.

Step 5- Haga clic en Siguiente y el Asistente para crear base de datos genera un lenguaje de definición de datos (DDL) para crear una base de datos. Ahora haga clic en Finalizar.

Step 6 - Haga clic derecho en T-SQL Editor y seleccione Ejecutar.

Step 7 - Para ver el esquema generado, haga clic con el botón derecho en el nombre de la base de datos en el Explorador de objetos de SQL Server y seleccione Actualizar.

Verá la tabla Departamentos en la base de datos.

Echemos un vistazo al siguiente ejemplo en el que se agregan y guardan algunos nuevos objetos de Departamento al contexto. Y luego recupera el departamento de informática.

class Program {

   static void Main(string[] args) {

      using (var context = new EFEnumModelContainer()) {

         context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});

         context.SaveChanges();

         var department = (
            from d in context.Departments
            where d.DeptName == DepartmentNames.Computer
            select d
         ).FirstOrDefault();

         Console.WriteLine(
            "Department ID: {0}, Department Name: {1}", 
               department.DeptID, department.DeptName
         );

         Console.ReadKey();
      }
   }
}

Cuando se ejecuta el código anterior, recibirá el siguiente resultado:

Department ID: 2, Department Name: Computer

Le recomendamos que ejecute el ejemplo anterior paso a paso para una mejor comprensión.