Compatibilidad con enumeración: EF Designer

Nota:

Solo EF5 y versiones posteriores: las características, las API, etc. que se tratan en esta página se introdujeron en 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 Designer. También muestra cómo usar enumeraciones en una consulta LINQ.

En este tutorial se usará Model First para crear una base de datos, pero EF Designer también se puede usar con el flujo de trabajo Database First para asignar a una base de datos existente.

El soporte de enum 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 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 entity Framework Designer. 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 EnumEFDesigner como nombre del proyecto y haga clic en Aceptar

Creación de un nuevo modelo mediante EF Designer

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto, seleccione Agregar y, luego, haga clic en Nuevo elemento
  2. Seleccione Datos en el menú izquierdo y, luego, elija ADO.NET Entity Data Model en el panel Plantillas
  3. Escriba TVFModel.edmx como nombre de archivo y, luego, haga clic en Agregar
  4. En la página Asistente para modelos de datos de entidad, seleccione Modelo vacío en el cuadro de diálogo Elegir contenido del modelo
  5. Haga clic en Finish (Finalizar).

Inicia Entity Designer, que proporciona una superficie de diseño para modificar el modelo.

El asistente realiza las siguientes acciones:

  • Genera el archivo School.edm que define el modelo conceptual, el modelo de almacenamiento y la asignación entre los dos modelos. Establece la propiedad Metadata Artifact Processing del archivo .edmx en Insertar en el ensamblado de salida para que los archivos de metadatos generados se inserte en el ensamblado.
  • Agrega una referencia a los siguientes ensamblados: EntityFramework, System.ComponentModel.DataAnnotations y System.Data.Entity.
  • Crea EnumTestModel.tt y EnumTestModel.Context.tt archivos y los agrega en el archivo .edmx. Estos archivos de plantilla T4 generan el código que define el tipo derivado dbContext y los tipos POCO que se asignan a las entidades del modelo .edmx.

Agregar un nuevo tipo de entidad

  1. Haga clic con el botón derecho en un área vacía de la superficie de diseño, seleccione Agregar -> Entidad, aparecerá el cuadro de diálogo Nueva entidad
  2. Especifique Department para el nombre de tipo y especifique DepartmentID para el nombre de la propiedad de clave, deje el tipo como Int32
  3. Haga clic en Aceptar
  4. Haga clic con el botón derecho en la entidad y seleccione Agregar nueva -> Propiedad escalar
  5. Cambie el nombre de la nueva propiedad a Name
  6. Cambie el tipo de la nueva propiedad a Int32 (de forma predeterminada, la nueva propiedad es de tipo String) Para cambiar el tipo, abra la ventana Propiedades y cambie la propiedad Type a Int32
  7. Agregue otra propiedad escalar y cámbiele el nombre a Budget, cambie el tipo a Decimal

Añadir un tipo de Enumeración

  1. En entity Framework Designer, haga clic con el botón derecho en la propiedad Name y seleccione Convertir en enumeración

    Convert To Enum

  2. En el cuadro de diálogo Agregar enumeración, escriba DepartmentNames para el nombre de tipo de enumeración, cambie el tipo subyacente a Int32y, a continuación, agregue los siguientes miembros al tipo: Inglés, Matemáticas y Economía

    Add Enum Type

  3. Haga clic en Aceptar

  4. Guardar el modelo y compilar el proyecto

    Nota:

    Cuando construya, pueden aparecer advertencias sobre entidades y asociaciones no mapeadas en la Lista de errores. Puede omitir estas advertencias, porque después de elegir generar la base de datos a partir del modelo, los errores desaparecen.

Si observa la ventana Propiedades, observará que el tipo de la propiedad Name se cambió a DepartmentNames y el tipo de enumeración recién agregado se agregó a la lista de tipos.

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

Model Browser

Nota:

También puede agregar nuevos tipos de enumeración desde esta ventana haciendo clic en el botón derecho del mouse y seleccionando Agregar tipo e enumeración. Una vez creado el tipo, aparecerá en la lista de tipos y podrá asociarlo a una propiedad

Generar base de datos a partir del modelo

Ahora podemos generar una base de datos basada en el modelo.

  1. Haga clic con el botón derecho del ratón en un espacio vacío de la superficie del Diseñador de entidades y seleccione Generar base de datos a partir del modelo
  2. Se muestra el cuadro de diálogo Elegir la conexión de datos del Asistente para generar base de datos. Haga clic en el botón Nueva conexión Especifique (localdb)\mssqllocaldb para el nombre del servidor y EnumTest para la base de datos y haga clic en Aceptar
  3. Cuadro de diálogo que pregunta si desea crear una nueva base de datos aparecerá, haga clic en .
  4. Haga clic en Siguiente y el Asistente para crear bases de datos genera un lenguaje de definición de datos (DDL) para crear una base de datos El DDL generado se muestra en el cuadro de diálogo Resumen y configuración Nota, que el DDL no contiene una definición para una tabla que se asigna al tipo de enumeración
  5. Haga clic en Finalizar haciendo clic en Finalizar no ejecuta el script DDL.
  6. El Asistente para crear bases de datos hace lo siguiente: Abre EnumTest.edmx.sql en el Editor de T-SQL Genera las secciones de esquema de almacén y asignación del archivo EDMX Agrega información de cadena de conexión al archivo App.config
  7. Haga clic en el botón derecho del mouse en el Editor de T-SQL y seleccione Ejecutar el cuadro de diálogo Conectar al servidor, escriba la información de conexión del paso 2 y haga clic en Conectar
  8. 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

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 EnumTestModelContainer())
{
    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} and Name: {1}",
        department.DepartmentID,  
        department.Name);
}

Compile y ejecute la aplicación. El programa produce el siguiente resultado:

DepartmentID: 1 Name: English

Para ver los datos de la base de datos, 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. A continuación, haga clic en el botón derecho del mouse de la tabla y seleccione Ver datos.

Resumen

En este tutorial hemos visto cómo asignar tipos de enumeración mediante Entity Framework Designer y cómo usar enumeraciones en el código.