Introducción
Es bastante probable que en alguna de las tablas de vuestras bases de datos tengas alguna propiedad de tipo Integer para representar una clave ajena de una tabla que no suele cambiar.
¿Por qué no utilizar una enumeración en lugar de otra tabla en la Base de Datos?
Bien, con Entity Framework 5.0 Beta 1 podemos hacer uso de enumeraciones en nuestras entidades sin tener que hacer ninguna chapuza. Esta versión es para VS11 con .NET 4.5. El trabajo con Enums ya se pudo probar con una CTP que salio en Junio de 2011 con Database First y Model First, pero no con Code First.
En este post vamos a ver como realizarlo en los distintos enfoques existentes.
Database First y Model First
Ya que Database First y Model First son dos enfoques muy similares vamos a tratarlos en común.
Para empezar:
1) Definiremos un nuevo proyecto, por ejemplo: una aplicación de consola.
2) Agregaremos nuestro Entity Data Model indicando nuestra Base de Datos y tablas.
3) Dentro del explorador del modelo de nuestro diagrama, veremos una nueva carpeta “Enum Types”. Pulsaremos con el botón secundario del ratón, y elegiremos la opción “Add Enum Type”. Configuraremos las características: Nombre, tipo de dato, y los miembros:
4) Asignación de la enumeración a una propiedad escalar: Desde la ventana de propiedades
Code First
Para usarlo seguiremos estos pasos:
1) Definiremos nuestra enumeración:
1: public enum Category
2: {
3: Technology,
4: Computer,
5: Games
6: }
2) Definiremos nuestra entidad:
1: public class Products
2: {
3: public int Id {get;set;}
4: public string Name {get;set;}
5: public Category Category {get;set;}
6: }
3) Incluiremos la colección en nuestro contexto:
1: public class Context : DbContext
2: {
3: public DbSet<Product> Products {get;set;}
4: }
4) En el momento de la definición de la Base de Datos va a definir una columna llamada Category de tipo Integer en nuestra Base de Datos.
Haciendo Consultas
Como las enumeraciones no estaban soportadas en versiones anteriores para poder utilizar la enumeración teniamos que obtener el código que nos interesaba.
En esta nueva versión podremos realizar la siguiente consulta:
1: var query = context.Products.Where(a=> a.Category == Category.Games);
Saludos!