División de tablas de Designer

En este tutorial, se muestra cómo asignar varios tipos de entidad a una sola tabla modificando un modelo con Entity Framework Designer (EF Designer).

Es posible que quiera usar la división de tablas para retrasar la carga de algunas propiedades al usar la carga diferida para cargar los objetos. Puede separar las propiedades que pueden contener una gran cantidad de datos en una entidad independiente y cargarlos solo cuando sea necesario.

En la imagen siguiente, se muestran las ventanas principales que se usan al trabajar con EF Designer.

EF Designer

Requisitos previos

Para completar este tutorial, necesitará:

Configuración del proyecto

Este tutorial usa Visual Studio 2012.

  • Abra Visual Studio 2012.
  • En el menú Archivo , elija Nuevoy haga clic en Proyecto.
  • En el panel izquierdo, haga clic en Visual C# y, luego, seleccione la plantilla Consola.
  • Escriba TableSplittingSample como nombre del proyecto y haga clic en Aceptar.

Creación de un modelo basado en la base de datos School

  • En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto, seleccione Agregar y haga clic en Nuevo elemento.
  • Seleccione Datos en el menú de la izquierda y elija Entity Data Model de ADO.NET en el panel Plantillas.
  • Escriba TableSplittingModel.edmx como nombre de archivo y, luego, haga clic en Agregar.
  • En el cuadro de diálogo Elegir contenido del modelo, seleccione Generar desde la base de datos y 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 para el nombre de la base de datos y, después, haga clic en Aceptar. El cuadro de diálogo Elija 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 Elija los objetos de base de datos, en el nodo Tablas, seleccione la tabla Persona. Esto agregará la tabla especificada al modelo School.
  • Haga clic en Finalizar

Inicia Entity Designer, que proporciona una superficie de diseño para modificar el modelo. Todos los objetos seleccionados en el cuadro de diálogo Elija los objetos de base de datos se agregan al modelo.

Asignar dos entidades a una sola tabla

En esta sección, dividirá la entidad Persona en dos entidades y, después, las asignará a una sola tabla.

Nota:

La entidad Persona no contiene ninguna propiedad que pueda contener una gran cantidad de datos; se usa como ejemplo.

  • Haga clic con el botón derecho en un área vacía de la superficie de diseño, seleccione Agregar nueva y haga clic en Entidad. Aparece el cuadro de diálogo Nueva entidad.
  • Escriba HireInfo para elNombre de entidad y PersonID para el nombre de Propiedad clave.
  • Haga clic en OK.
  • Se crea y se muestra un nuevo tipo de entidad en la superficie de diseño.
  • Seleccione la propiedad HireDate del tipo de entidad Persona y presione las teclas Ctrl+X.
  • Seleccione la entidad HireInfo y presione las teclas Ctrl+V.
  • Cree una asociación entre Persona y HireInfo. Para hacerlo, haga clic con el botón derecho en un área vacía de la superficie de diseño, seleccione Agregar nueva y haga clic en Asociación.
  • Aparece el cuadro de diálogo Agregar asociación. El nombre personHireInfo se asigna de forma predeterminada.
  • Especifique la multiplicidad 1(One) en ambos extremos de la relación.
  • Haga clic en Aceptar.

El siguiente paso requiere la ventana Detalles de asignación. Si no puede ver esta ventana, haga clic con el botón derecho en la superficie de diseño y seleccione Detalles de la asignación.

  • Seleccione el tipo de entidad HireInfo y haga clic en <Agregar una tabla o vista> en la ventana Detalles de la asignación.

  • Seleccione Persona en la lista desplegable del campo<Agregar una tabla o vista>. La lista contiene tablas o vistas a las que se puede asignar la entidad seleccionada. Las propiedades adecuadas deben asignarse de forma predeterminada.

    Mapping Properties

  • Seleccione la asociación PersonHireInfo en la superficie de diseño.

  • Haga clic con el botón derecho en la asociación en la superficie de diseño y seleccione Propiedades.

  • En la ventana Propiedades, seleccione la propiedad Restricciones referenciales y haga clic en el botón de puntos suspensivos.

  • Seleccione Persona en la lista desplegable Principal.

  • Haga clic en Aceptar.

 

Uso del modelo

  • Escriba el siguiente código en el método Main.
    using (var context = new SchoolEntities())
    {
        Person person = new Person()
        {
            FirstName = "Kimberly",
            LastName = "Morgan",
            Discriminator = "Instructor",
        };

        person.HireInfo = new HireInfo()
        {
            HireDate = DateTime.Now
        };

        // Add the new person to the context.
        context.People.Add(person);

        // Insert a row into the Person table.  
        context.SaveChanges();

        // Execute a query against the Person table.
        // The query returns columns that map to the Person entity.
        var existingPerson = context.People.FirstOrDefault();

        // Execute a query against the Person table.
        // The query returns columns that map to the Instructor entity.
        var hireInfo = existingPerson.HireInfo;

        Console.WriteLine("{0} was hired on {1}",
            existingPerson.LastName, hireInfo.HireDate);
    }
  • Compile y ejecute la aplicación.

Las siguientes instrucciones T-SQL se ejecutaron en la base de datos School como resultado de ejecutar esta aplicación. 

  • Se ejecutó la siguiente instrucción INSERT como resultado de la ejecución de context.SaveChanges() y combina datos de las entidades Persona y HireInfo

    Insert Combining Person and HireInfo Data

  • Se ejecutó la siguiente instrucción SELECT como resultado de la ejecución de context.People.FirstOrDefault() y selecciona solo las columnas asignadas a Persona

    Select 1

  • Se ejecutó la siguiente instrucción SELECT como resultado de tener acceso a la propiedad de navegación existentePerson.Instructor y selecciona solo las columnas asignadas a HireInfo

    Select 2