Herencia de TPT del diseñador

En este tutorial paso a paso se muestra cómo implementar la herencia de tabla por tipo (TPT) en el modelo con Entity Framework Designer (EF Designer). La herencia de tabla por tipo utiliza una tabla independiente de la base de datos para mantener los datos de las propiedades no heredadas y de las propiedades de clave para cada tipo de la jerarquía de herencia.

En este tutorial asignaremos las entidades Curso (tipo base), Curso online (deriva de Curso) y Curso presencial (deriva de Curso) a tablas con los mismos nombres. Crearemos un modelo a partir de la base de datos y, a continuación, modificaremos el modelo para implementar la herencia de TPT.

También puede empezar con Model First y, a continuación, generar la base de datos a partir del modelo. Ef Designer usa la estrategia TPT de forma predeterminada, por lo que cualquier herencia del modelo se asignará a tablas independientes.

Otras opciones de herencia

Tabla por jerarquía (TPH) es otro tipo de herencia en la que se usa una tabla de base de datos para mantener los datos de todos los tipos de entidad de una jerarquía de herencia.  Para obtener información sobre cómo asignar la herencia de tabla por jerarquía con Entity Designer, consulte Herenciade TPH de EF Designer

Tenga en cuenta que, el entorno de ejecución de Entity Framework admite la herencia de tablas por tipo concreto (TPC) y los modelos de herencia mixta, pero no son compatibles con EF Designer. Si desea usar TPC o herencia mixta, tiene dos opciones: usar Code First o editar manualmente el archivo EDMX. Si decide trabajar con el archivo EDMX, la ventana Detalles de asignación se colocará en "modo seguro" y no podrá usar el diseñador para cambiar las asignaciones.

Requisitos previos

Para completar este tutorial, necesitará:

Configuración del proyecto

  • Abra Visual Studio 2012.
  • Seleccione Archivo-> Nuevo -> Proyecto
  • En el panel izquierdo, haga clic en Visual C# y seleccione la plantilla Consola.
  • Escriba TPTDBFirstSample como nombre.
  • Seleccione Aceptar.

Creación de un modelo

  • Haga clic con el botón derecho en el Explorador de soluciones y seleccione Agregar:> Nuevo elemento.
  • Seleccione Datos en el menú de la izquierda y elija Entity Data Model de ADO.NET en el panel Plantillas.
  • Escriba TPTModel.edmx como nombre de archivo y, a continuación, haga clic en Agregar.
  • En el cuadro de diálogo Elegir contenido de modelo, seleccione** Generar desde la base de datos** y, a continuación, haga clic en Siguiente.
  • Haga clic en Nueva conexión. En el cuadro de diálogo Propiedades de conexión, escriba el nombre del servidor (por ejemplo, (localdb)\mssqllocaldb ), seleccione el método de autenticación, escribaSchool como nombre de la base de datos y haga clic en Aceptar. El cuadro de diálogo Elegir la conexión de datos se actualiza con la configuración de la conexión de la base de datos.
  • En el cuadro de diálogo Elegir los objetos de base de datos, en el nodo Tablas, seleccione las tablas Departamento, Curso, Curso online y Curso presencial.
  • Haga clic en Finalizar

Todos los objetos seleccionados en el cuadro de diálogo Elegir objetos de base de datos se agregan al modelo. Todos los objetos seleccionados en el cuadro de diálogo Elegir objetos de base de datos se agregan al modelo.

Implementación de la herencia de tabla por tipo

  • En la superficie de diseño, haga clic con el botón derecho en el tipo de entidad Curso online y seleccione Propiedades.
  • En la ventana Propiedades, establezca la propiedad Tipo base en Curso.
  • Haga clic con el botón derecho en el tipo de entidad Curso presencial y seleccione Propiedades.
  • En la ventana Propiedades, establezca la propiedad Tipo base en Curso.
  • Haga clic con el botón derecho en la asociación (la línea) entre los tipos de entidad Curso online y Curso. Seleccione Eliminar del modelo.
  • Haga clic con el botón derecho en la asociación entre los tipos de entidad Curso presencial y Curso. Seleccione Eliminar del modelo.

Ahora eliminaremos la propiedad ID del Curso de Curso online y Curso presencial porque estas clases heredan ID del curso del tipo de base Curso.

  • Haga clic con el botón derecho en la propiedad ID del curso del tipo de entidad Curso online y seleccione Eliminar del modelo.
  • Haga clic con el botón derecho en la propiedad ID del curso del tipo de entidad Curso presencial y seleccione Eliminar del modelo.
  • Ya está implementada la herencia de tabla por tipo.

Table Per Type

Uso del modelo

Abra el archivo Program.cs donde se define el método Prinipal. Pegue el siguiente código en la función Principal. El código ejecuta tres consultas. La primera consulta devuelve todos los Curso relacionados con el departamento especificado. La segunda consulta usa el método OfType para devolver los Cursos online relacionado con el departamento especificado. La tercera consulta devuelve Cursos presenciales.

    using (var context = new SchoolEntities())
    {
        foreach (var department in context.Departments)
        {
            Console.WriteLine("The {0} department has the following courses:",
                               department.Name);

            Console.WriteLine("   All courses");
            foreach (var course in department.Courses )
            {
                Console.WriteLine("     {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnlineCourse>())
            {
                Console.WriteLine("   Online - {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnsiteCourse>())
            {
                Console.WriteLine("   Onsite - {0}", course.Title);
            }
        }
    }