Creare relazioni tra set di dati nelle applicazioni .NET Framework

Nota

I set di dati e le classi correlate sono tecnologie .NET Framework legacy dei primi anni '2000 che consentono alle applicazioni di lavorare con i dati in memoria mentre le applicazioni vengono disconnesse dal database. Sono particolarmente utili per le applicazioni che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Anche se i set di dati hanno dimostrato di essere una tecnologia molto efficace, è consigliabile che le nuove applicazioni .NET usino Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e ha un'interfaccia di programmazione più semplice.

I set di dati che contengono tabelle dati correlate usano DataRelation oggetti per rappresentare una relazione padre/figlio tra le tabelle e per restituire i record correlati l'uno dall'altro. L'aggiunta di tabelle correlate ai set di dati tramite la Configurazione guidata origine dati o Progettazione set di dati crea e configura automaticamente l'oggetto DataRelation .

L'oggetto DataRelation esegue due funzioni:

  • Può rendere disponibili i record correlati a un record con cui si sta lavorando. Fornisce record figlio se si è in un record padre (GetChildRows) e un record padre se si utilizza un record figlio (GetParentRow).

  • Può applicare vincoli per l'integrità referenziale, ad esempio l'eliminazione di record figlio correlati quando si elimina un record padre.

È importante comprendere la differenza tra un vero join e la funzione di un DataRelation oggetto . In un vero join, i record vengono ricavati dalle tabelle padre e figlio e inseriti in un singolo recordset flat. Quando si usa un DataRelation oggetto , non viene creato alcun nuovo recordset. DataRelation tiene invece traccia della relazione tra tabelle e mantiene sincronizzati i record padre e figlio.

Oggetti e vincoli DataRelation

Un DataRelation oggetto viene usato anche per creare e applicare i vincoli seguenti:

  • Vincolo univoco, che garantisce che una colonna nella tabella non contenga duplicati.

  • Vincolo di chiave esterna, che può essere usato per mantenere l'integrità referenziale tra una tabella padre e figlio in un set di dati.

I vincoli specificati in un DataRelation oggetto vengono implementati creando automaticamente oggetti appropriati o impostando le proprietà. Se si crea un vincolo di chiave esterna usando l'oggetto DataRelation , le istanze della ForeignKeyConstraint classe vengono aggiunte alla DataRelation proprietà dell'oggetto ChildKeyConstraint .

Un vincolo univoco viene implementato semplicemente impostando la Unique proprietà di una colonna di dati su true o aggiungendo un'istanza della UniqueConstraint classe alla DataRelation proprietà dell'oggetto ParentKeyConstraint . Per informazioni sulla sospensione dei vincoli in un set di dati, vedere Disattivare i vincoli durante il riempimento di un set di dati.

Regole di integrità referenziale

Come parte del vincolo di chiave esterna, è possibile specificare regole di integrità referenziale applicate a tre punti:

  • Quando un record padre viene aggiornato

  • Quando viene eliminato un record padre

  • Quando una modifica viene accettata o rifiutata

Le regole che è possibile creare vengono specificate nell'enumerazione Rule e sono elencate nella tabella seguente.

Regola del vincolo di chiave esterna Azione
Cascade La modifica (aggiornamento o eliminazione) apportata al record padre viene apportata anche nei record correlati nella tabella figlio.
SetNull I record figlio non vengono eliminati, ma la chiave esterna nei record figlio è impostata su DBNull. Con questa impostazione, i record figlio possono essere lasciati come "orfani", ovvero non hanno alcuna relazione con i record padre. Nota: l'uso di questa regola può comportare dati non validi nella tabella figlio.
SetDefault La chiave esterna nei record figlio correlati viene impostata sul valore predefinito ,come stabilito dalla proprietà della DefaultValue colonna.
None Non viene apportata alcuna modifica ai record figlio correlati. Con questa impostazione, i record figlio possono contenere riferimenti a record padre non validi.

Per altre informazioni sugli aggiornamenti nelle tabelle del set di dati, vedere Salvare nuovamente i dati nel database.

Relazioni solo vincoli

Quando si crea un DataRelation oggetto, è possibile specificare che la relazione venga usata solo per applicare vincoli, ovvero non verrà usata anche per accedere ai record correlati. È possibile usare questa opzione per generare un set di dati leggermente più efficiente e che contiene meno metodi rispetto a uno con la funzionalità relativa ai record. Tuttavia, non sarà possibile accedere ai record correlati. Ad esempio, una relazione di sola vincolo impedisce l'eliminazione di un record padre che contiene ancora record figlio e non è possibile accedere ai record figlio tramite l'elemento padre.

Creazione manuale di una relazione di dati in Progettazione set di dati

Quando si creano tabelle dati usando gli strumenti di progettazione dei dati in Visual Studio, le relazioni vengono create automaticamente se le informazioni possono essere raccolte dall'origine dei dati. Se si aggiungono manualmente tabelle dati dalla scheda DataSet della casella degli strumenti, potrebbe essere necessario creare la relazione manualmente. Per informazioni sulla creazione di DataRelation oggetti a livello di codice, vedere Aggiunta di DataRelations.

Le relazioni tra tabelle di dati vengono visualizzate come righe in Progettazione set di dati, con una chiave e un glifo infinito che illustrano l'aspetto uno-a-molti della relazione. Per impostazione predefinita, il nome della relazione non viene visualizzato nell'area di progettazione.

Nota

I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio in questo articolo potrebbero essere diversi nel computer in uso. È possibile usare un'edizione diversa di Visual Studio o impostazioni di ambiente diverse. Per altre informazioni, vedere Personalizzare l'IDE.

Per creare una relazione tra due tabelle dati

  1. Aprire il set di dati in Progettazione DataSet. Per altre informazioni, vedere Procedura dettagliata: Creazione di un set di dati in Progettazione set di dati.

  2. Trascinare un oggetto Relation dalla casella degli strumenti DataSet nella tabella dati figlio nella relazione.

    Verrà visualizzata la finestra di dialogo Relazione , che popola la casella Tabella figlio con la tabella in cui è stato trascinato l'oggetto Relation .

  3. Selezionare la tabella padre nella casella Tabella padre. La tabella padre contiene record sul lato "uno" di una relazione uno-a-molti.

  4. Verificare che la tabella figlio corretta sia visualizzata nella casella Tabella figlio. La tabella figlio contiene record sul lato "molti" di una relazione uno-a-molti.

  5. Digitare un nome per la relazione nella casella Nome oppure lasciare il nome predefinito in base alle tabelle selezionate. Si tratta del nome dell'oggetto effettivo DataRelation nel codice.

  6. Selezionare le colonne che uniscono le tabelle negli elenchi Colonne chiave e Colonne chiave esterna.

  7. Selezionare se creare una relazione, un vincolo o entrambi.

  8. Selezionare o deselezionare la casella Relazione annidata. Se si seleziona questa opzione, la Nested proprietà viene impostata su truee le righe figlio della relazione vengono annidate all'interno della colonna padre quando tali righe vengono scritte come dati XML o sincronizzate con XmlDataDocument. Per altre informazioni, vedere Annidamento di dataRelations.

  9. Impostare le regole da applicare quando si apportano modifiche ai record in queste tabelle. Per ulteriori informazioni, vedere Rule.

  10. Fare clic su OK per creare la relazione. Viene visualizzata una linea di relazione nella finestra di progettazione tra le due tabelle.

Per visualizzare un nome di relazione in Progettazione set di dati

  1. Aprire il set di dati in Progettazione DataSet. Per altre informazioni, vedere Procedura dettagliata: Creazione di un set di dati in Progettazione set di dati.

  2. Dal menu Dati selezionare il comando Mostra etichette relazione per visualizzare il nome della relazione. Deselezionare il comando per nascondere il nome della relazione.