Suddivisione delle entità della finestra di progettazione

Questa procedura dettagliata illustra come eseguire il mapping di un tipo di entità a due tabelle modificando un modello con Entity Framework Designer (EF Designer). È possibile eseguire il mapping di un'entità a più tabelle quando le tabelle in questione condividono una chiave comune. I concetti applicabili al mapping di un tipo di entità a due tabelle vengono facilmente estesi per eseguire il mapping di un tipo di entità a più di due tabelle.

L'immagine seguente mostra le finestre principali usate quando si lavora con Entity Framework Designer.

EF Designer

Prerequisiti

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

Creare il database

Il server di database installato con Visual Studio è diverso a seconda della versione di Visual Studio installata:

  • Se si usa Visual Studio 2012, si creerà un database Local DB.
  • Se si usa Visual Studio 2010, si creerà un database SQL Express.

Prima di tutto si creerà un database con due tabelle che verranno combinate in una singola entità.

  • Aprire Visual Studio.
  • Visualizzazione -> Esplora server
  • Fare clic con il pulsante destro del mouse su Data Connessione ions -> Aggiungi Connessione ion...
  • Se non si è connessi a un database da Esplora server prima di dover selezionare Microsoft SQL Server come origine dati
  • Connessione a Local DB o SQL Express, a seconda di quale è stato installato
  • Immettere EntitySplitting come nome del database
  • Selezionare OK e verrà chiesto se si vuole creare un nuovo database, selezionare
  • Il nuovo database verrà ora visualizzato in Esplora server
  • Se si usa Visual Studio 2012
    • Fare clic con il pulsante destro del mouse sul database in Esplora server e scegliere Nuova query
    • Copiare il codice SQL seguente nella nuova query, quindi fare clic con il pulsante destro del mouse sulla query e selezionare Esegui
  • Se si usa Visual Studio 2010
    • Selezionare Dati -> Editor TRANSACT SQL -> Nuova Connessione query...
    • Immettere .\SQLEXPRESS come nome del server e fare clic su OK
    • Selezionare il database EntitySplitting dall'elenco a discesa nella parte superiore dell'editor di query
    • Copiare il codice SQL seguente nella nuova query, quindi fare clic con il pulsante destro del mouse sulla query e selezionare Esegui 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
);

Creare il progetto

  • Scegliere Nuovo dal menu Filee quindi fare clic su Progetto.
  • Nel riquadro sinistro fare clic su Visual C# e quindi selezionare il modello Applicazione console.
  • Immettere MapEntityToTablesSample come nome del progetto e fare clic su OK.
  • Fare clic su No se viene richiesto di salvare la query SQL creata nella prima sezione.

Creare un modello basato sul database

  • Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni, scegliere Aggiungi e quindi fare clic su Nuovo elemento.
  • Selezionare Dati dal menu a sinistra e quindi selezionare ADO.NET Entity Data Model nel riquadro Modelli.
  • Immettere MapEntityToTablesModel.edmx per il nome del file e quindi fare clic su Aggiungi.
  • Nella finestra di dialogo Scegli contenuto modello selezionare Genera dal database e quindi fare clic su Avanti.
  • Selezionare la connessione EntitySplitting dall'elenco a discesa e fare clic su Avanti.
  • Nella finestra di dialogo Scegli oggetti di database selezionare la casella accanto al nodo Tabelle . Verranno aggiunte tutte le tabelle dal database EntitySplitting al modello.
  • Fare clic su Fine.

Viene visualizzato Entity Designer, che fornisce un'area di progettazione per la modifica del modello.

Eseguire il mapping di un'entità a due tabelle

In questo passaggio si aggiornerà il tipo di entità Person per combinare i dati dalle tabelle Person e PersonInfo .

  • Selezionare le proprietà Email e Telefono dell'entità **PersonInfo **e premere CTRL+X tasti.

  • Selezionare l'entità **Persona **e premere CTRL+V .

  • Nell'area di progettazione selezionare l'entità PersonInfo e premere il pulsante Elimina sulla tastiera.

  • Fare clic su No quando viene chiesto se si desidera rimuovere la tabella PersonInfo dal modello, verrà eseguito il mapping all'entità Person.

    Delete Tables

I passaggi successivi richiedono la finestra Dettagli mapping. Se non è possibile visualizzare questa finestra, fare clic con il pulsante destro del mouse sull'area di progettazione e selezionare Dettagli mapping.

  • Selezionare il tipo di entità Person e fare clic su< Aggiungi tabella o vista> nella finestra Dettagli mapping.
  • Selezionare **PersonInfo ** nell'elenco a discesa. La finestra Dettagli mapping viene aggiornata con i mapping delle colonne predefiniti, che sono adatti allo scenario.

Il tipo di entità Person è ora mappato alle tabelle Person e PersonInfo .

Mapping 2

Usare il modello

  • Incollare il codice seguente nel metodo 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);
        }
    }
  • Compilare l'applicazione ed eseguirla.

Le istruzioni T-SQL seguenti sono state eseguite sul database in seguito all'esecuzione dell'applicazione. 

  • Le due istruzioni IN edizione Standard RT seguenti sono state eseguite in seguito all'esecuzione del contesto. SaveChanges(). Accettano i dati dall'entità Person e li suddividono tra le tabelle Person e PersonInfo .

    Insert 1

    Insert 2

  • Il edizione Standard LECT seguente è stato eseguito come risultato dell'enumerazione delle persone nel database. Combina i dati della tabella Person e PersonInfo .

    Select Combining Person and PersonInfo Data