Suddivisione tabella di Progettazione

Questa procedura dettagliata illustra come eseguire il mapping di più tipi di entità a una singola tabella modificando un modello con Entity Framework Designer (EF Designer).

Un motivo per cui è consigliabile usare la suddivisione delle tabelle è ritardare il caricamento di alcune proprietà quando si usa il caricamento differita per caricare gli oggetti. È possibile separare le proprietà che potrebbero contenere grandi quantità di dati in un'entità separata e caricarla solo quando necessario.

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

EF Designer

Prerequisiti

Per completare questa procedura dettagliata, sarà necessario:

  • Una versione recente di Visual Studio.
  • Database di esempio School.

Configurare il progetto

Questa procedura dettagliata usa Visual Studio 2012.

  • Aprire Visual Studio 2012.
  • 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 TableSplittingSample come nome del progetto e fare clic su OK.

Creare un modello basato sul database dell'istituto di istruzione

  • 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 TableSplittingModel.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.
  • Fare clic su Nuovo Connessione ion. Nella finestra di dialogo Proprietà Connessione ion immettere il nome del server ( ad esempio (localdb)\mssqllocaldb), selezionare il metodo di autenticazione, digitare School per il nome del database e quindi fare clic su OK. La finestra di dialogo Choose Your Data Connessione ion viene aggiornata con l'impostazione di connessione al database.
  • Nella finestra di dialogo Scegli oggetti di database aprire il nodo Tabelle e selezionare la tabella Person . Verrà aggiunta la tabella specificata al modello School .
  • Fare clic su Fine.

Viene visualizzato Entity Designer, che fornisce un'area di progettazione per la modifica del modello. Tutti gli oggetti selezionati nella finestra di dialogo Scegli oggetti di database vengono aggiunti al modello.

Eseguire il mapping di due entità a una singola tabella

In questa sezione si suddividerà l'entità Person in due entità e quindi si eseguirà il mapping a una singola tabella.

Nota

L'entità Person non contiene proprietà che possono contenere grandi quantità di dati, ma viene usata come esempio.

  • Fare clic con il pulsante destro del mouse su un'area vuota dell'area di progettazione, scegliere Aggiungi nuovoe fare clic su Entità. Verrà visualizzata la finestra di dialogo Nuova entità .
  • Digitare HireInfo per il nome dell'entità e PersonID per il nome della proprietà della chiave.
  • Fare clic su OK.
  • Nell'area di progettazione verrà creato e visualizzato un nuovo tipo di entità.
  • Selezionare la proprietà HireDate del tipo di entità Person e premere CTRL+X tasti.
  • Selezionare l'entità HireInfo e premere CTRL+V .
  • Creare un'associazione tra Person e HireInfo. A tale scopo, fare clic con il pulsante destro del mouse su un'area vuota dell'area di progettazione, scegliere Aggiungi nuovoe fare clic su Associazione.
  • Verrà visualizzata la finestra di dialogo Aggiungi associazione . Il nome PersonHireInfo viene assegnato per impostazione predefinita.
  • Specificare la molteplicità 1(Uno) in entrambe le estremità della relazione.
  • Scegliere OK.

Il passaggio successivo richiede 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à HireInfo e fare clic su< Aggiungi tabella o vista> nella finestra Dettagli mapping.

  • Selezionare Persona dall'elenco <a discesa Aggiungi un campo Tabella o Vista>. L'elenco contiene tabelle o viste a cui è possibile eseguire il mapping dell'entità selezionata. Le proprietà appropriate devono essere mappate per impostazione predefinita.

    Mapping Properties

  • Selezionare l'associazione PersonHireInfo nell'area di progettazione.

  • Fare clic con il pulsante destro del mouse sull'associazione nell'area di progettazione e scegliere Proprietà.

  • Nella finestra Proprietà selezionare la proprietà Vincoli referenziale e fare clic sul pulsante con i puntini di sospensione.

  • Selezionare Person (Persona ) dall'elenco a discesa Principal (Entità ).

  • Scegliere OK.

 

Usare il modello

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

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

  • Il codice IN edizione Standard RT seguente è stato eseguito in seguito all'esecuzione del contesto. SaveChanges() e combina i dati delle entità Person e HireInfo

    Insert Combining Person and HireInfo Data

  • Il edizione Standard LECT seguente è stato eseguito in seguito all'esecuzione di context.Persone. FirstOrDefault() e seleziona solo le colonne mappate a Person

    Select 1

  • Il edizione Standard LECT seguente è stato eseguito in seguito all'accesso alla proprietà di navigazione existingPerson.Instructor e seleziona solo le colonne mappate a HireInfo

    Select 2