Condividi tramite


Configurare l'ereditarietà usando Object Relational Designer

Progettazione relazionale oggetti (O/R Designer) supporta il concetto di ereditarietà a tabella singola, come viene spesso implementato nei sistemi relazionali. Nell'ereditarietà a tabella singola, è presente una singola tabella di database che contiene campi per le informazioni padre e le informazioni figlio. Insieme ai dati relazionali, una colonna discriminatore contiene il valore che determina la classe a cui appartiene un record.

Si consideri, ad esempio, una Persons tabella contenente tutti gli impiegati da un'azienda. alcune delle quali sono dipendenti mentre altre sono manager. La Persons tabella contiene una colonna denominata EmployeeType con valore 1 per i manager e il valore 2 per i dipendenti. Si tratta della colonna discriminatoria. In questo scenario è possibile creare una sottoclasse di dipendenti e popolarla solo con i record che hanno un valore 2 in EmployeeType. È anche possibile rimuovere le colonne non appropriate da ognuna delle classi.

La creazione di un modello a oggetti che usa l'ereditarietà (e corrisponde ai dati relazionali) può generare una certa confusione. Nella procedura riportata di seguito vengono illustrati i passaggi necessari per la configurazione dell'ereditarietà con Object Relational Designer. Seguire i passaggi generici senza fare riferimento a una tabella e a colonne esistenti potrebbe essere difficile, quindi viene fornita una procedura dettagliata che usa i dati. Per istruzioni dettagliate per la configurazione dell'ereditarietà usando il O/R Designer, vedere procedura dettagliata: creazione di LINQ to SQL classi con ereditarietà a tabella singola (O/R Designer).

Per creare classi di dati ereditate

  1. Aprire Progettazione O/R aggiungendo un elemento LINQ to SQL Classes a un progetto Visual Basic o C# esistente.

  2. Trascinare la tabella da usare come classe di base nella finestra di progettazione O/R.

  3. Trascinare una seconda copia della tabella in Progettazione O/R e rinominarla. In tal modo si otterrà la classe derivata o sottoclasse.

  4. Fare clic su Ereditarietà nella scheda Progettazione relazionale oggetti della Casella degli strumenti, quindi selezionare la sottoclasse (la tabella rinominata) e connetterla alla classe di base.

    Nota

    Fare clic sull'elemento Ereditarietà nella casella degli strumenti e rilasciare il pulsante del mouse, fare clic sulla seconda copia della classe creata nel passaggio 3 e quindi selezionare la prima classe creata nel passaggio 2. La freccia sulla linea di ereditarietà punta alla prima classe.

  5. In ogni classe eliminare le proprietà dell'oggetto che non si desidera visualizzare e che non sono usate per le associazioni. Viene visualizzato un errore se si tenta di eliminare le proprietà dell'oggetto usate per le associazioni: The property <property name> cannot be deleted because it is participating in the association <association name>.

    Nota

    Poiché una classe derivata eredita le proprietà definite nella relativa classe di base, non è possibile definire le stesse colonne in ogni classe Le colonne vengono implementate come proprietà. È possibile abilitare la creazione di colonne nella classe derivata impostando il modificatore di ereditarietà sulla proprietà nella classe base. Per altre informazioni, vedere Nozioni di base sull'ereditarietà (Visual Basic).

  6. Selezionare la riga di ereditarietà in Progettazione O/R.

  7. Nella finestra Proprietà impostare La proprietà discriminatore sul nome della colonna che distingue i record nelle classi.

  8. Impostare la proprietà Derived Class Discriminator Value sul valore nel database che designa il record come tipo ereditato. Questo è il valore archiviato nella colonna discriminatoria e viene usato per designare la classe ereditata.

  9. Impostare la proprietà Base Class Discriminator Value sul valore che designa il record come tipo di base. Questo è il valore archiviato nella colonna discriminatoria e viene usato per designare la classe di base.

  10. È anche possibile impostare eventualmente la proprietà Inheritance Default per definire un tipo in una gerarchia di ereditarietà usata durante il caricamento di righe che non corrispondono ad alcun codice di ereditarietà definito. In altre parole, se un record ha un valore nella colonna discriminatoria che non corrisponde al valore nelle proprietà Valore discriminatorio classe derivata o Valore discriminatorio classe base, il record viene caricato nel tipo designato come valore predefinito di ereditarietà.