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.