División de entidades del diseñador

En este tutorial se muestra cómo asignar un tipo de entidad a dos tablas modificando un modelo con Entity Framework Designer (EF Designer). Puede asignar una entidad a varias tablas cuando estas comparten una clave común. Los conceptos que se aplican a la asignación de un tipo de entidad a dos tablas se extienden fácilmente a la asignación de un tipo de entidad a más de dos tablas.

La siguiente imagen muestra las ventanas principales que se usan cuando se trabaja con EF Designer.

EF Designer

Requisitos previos

Visual Studio 2012 o Visual Studio 2010, Ultimate, Premium, Professional o Express para Web.

Creación de la base de datos

El servidor de bases de datos que se instala con Visual Studio es diferente en función de la versión de Visual Studio que se haya instalado:

  • Si usa Visual Studio 2012, creará una base de datos LocalDB.
  • Si usa Visual Studio 2010, creará una base de datos de SQL Express.

En primer lugar, vamos a crear una base de datos con dos tablas que combinaremos en una sola entidad.

  • Abra Visual Studio.
  • Ver -> Explorador de servidores
  • Haga clic con el botón derecho en Conexiones de datos -> Agregar conexión...
  • Si no se ha conectado a una base de datos desde el Explorador de servidores antes, debe seleccionar Microsoft SQL Server como origen de datos
  • Conéctese a LocalDB o SQL Express, dependiendo de cuál haya instalado.
  • Escriba EntitySplitting como nombre de la base de datos.
  • Seleccione Aceptar. Se le preguntará si desea crear una nueva base de datos. Seleccione .
  • La nueva base de datos aparece ahora en el Explorador de servidores.
  • Si usa Visual Studio 2012
    • Haga clic con el botón derecho en la base de datos en el Explorador de servidores y seleccione Nueva consulta.
    • Copie el siguiente código SQL en la nueva consulta, haga clic con el botón derecho en ella y seleccione Ejecutar.
  • Si usa Visual Studio 2010
    • Seleccione Datos -> Editor de Transact SQL -> Nueva conexión de consulta...
    • Escriba .\SQLEXPRESS como nombre del servidor y haga clic en Aceptar.
    • Seleccione la base de datos EntitySplitting en la lista desplegable de la parte superior del editor de consultas.
    • Copie el siguiente código SQL en la nueva consulta, haga clic con el botón derecho en ella y seleccione Ejecutar SQL.
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);

CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);

Crear el proyecto

  • En el menú Archivo , elija Nuevoy haga clic en Proyecto.
  • En el panel izquierdo, haga clic en Visual C# y seleccione la plantilla Aplicación de consola.
  • Escriba MapEntityToTablesSample como nombre del proyecto y haga clic en Aceptar.
  • Haga clic en No si se le pide que guarde la consulta SQL que creó en la primera sección.

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

  • 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 MapEntityToTablesModel.edmx como nombre de archivo y 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.
  • Seleccione la conexión EntitySplitting en la lista desplegable y haga clic en Siguiente.
  • En el cuadro de diálogo Elija los objetos de base de datos, active la casilla situada junto al nodo Tablas. Esto agrega todas las tablas de la base de datos EntitySplitting al modelo.
  • Haga clic en Finalizar

Se muestra Entity Designer, que proporciona una superficie de diseño para editar el modelo.

Asignación de una entidad a dos tablas

En este paso, actualizaremos el tipo de entidad Person para combinar datos de las tablas Person y PersonInfo.

  • Seleccione las propiedades Email y Phone de la entidad **PersonInfo** y presione Ctrl+X.

  • Seleccione la entidad **Person** y presione Ctrl+V.

  • En la superficie de diseño, seleccione la entidad PersonInfo y presione la tecla Supr en el teclado.

  • Haga clic en No cuando se le pregunte si desea quitar la tabla PersonInfo del modelo. Estamos a punto de asignársela a la entidad Person.

    Delete Tables

Los pasos siguientes requieren la ventana Detalles de la 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 Person y haga clic en <Agregar una tabla o vista> en la ventana Detalles de la asignación.
  • Seleccione **PersonInfo ** en la lista desplegable. La ventana Detalles de la asignación se actualiza con las asignaciones de columna predeterminadas, que es suficiente para nuestro escenario.

El tipo de entidad Person está asignado ahora a las tablas Person y PersonInfo.

Mapping 2

Uso del modelo

  • Escriba el siguiente código en el método Main.
    using (var context = new EntitySplittingEntities())
    {
        var person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Email = "john@example.com",
            Phone = "555-555-5555"
        };

        context.People.Add(person);
        context.SaveChanges();

        foreach (var item in context.People)
        {
            Console.WriteLine(item.FirstName);
        }
    }
  • Compile y ejecute la aplicación.

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

  • Las dos instrucciones INSERT siguientes se ejecutan como resultado de ejecutar context.SaveChanges(). Toman los datos de la entidad Person y los dividen entre las tablas Person y PersonInfo.

    Insert 1

    Insert 2

  • La siguiente instrucción SELECT se ejecuta como resultado de enumerar las personas de la base de datos. Combina los datos de las tablas Person y PersonInfo.

    Select Combining Person and PersonInfo Data