Introduzione agli oggetti DataRelation

I dataset contenenti tabelle di dati correlate utilizzano oggetti DataRelation per rappresentare una relazione padre/figlio tra le tabelle e per restituire i record correlati dall'una all'altra. L'aggiunta di tabelle correlate ai dataset mediante la Configurazione guidata origine dati o mediante Progettazione DataSet comporta la creazione e la configurazione dell'oggetto DataRelation. Per informazioni sulla restituzione di record correlati, vedere Procedura: accedere ai record di DataTable correlate. Per informazioni sulla creazione di relazioni dati, vedere Procedura: creare DataRelation mediante Progettazione DataSet.

L'oggetto DataRelation ha una duplice funzione:

  • Rendere disponibili i record relativi a un record in uso. Fornire record figlio se si è all'interno di un record padre (GetChildRows) e un record padre se si utilizza un record figlio (GetParentRow ).

  • Attivare i vincoli per l'integrità referenziale, eliminando ad esempio i record figlio in caso di eliminazione del record padre.

È importante comprendere la differenza tra un join e la funzione di un oggetto DataRelation. In un join i record vengono ricavati dalle tabelle padre e figlio e inseriti in un unico recordset. Quando si utilizza un oggetto DataRelation, non vengono creati recordset nuovi. Al contrario la relazione tiene traccia del rapporto tra le tabelle e mantiene in sincronia i record padre e figlio.

Vincoli e oggetti DataRelation

Un oggetto DataRelation consente inoltre di creare e attivare i seguenti vincoli:

  • Un vincolo univoco, che garantisce l'assenza di duplicati in una colonna della tabella.

  • Un vincolo della chiave esterna, che può essere utilizzato per mantenere l'integrità referenziale tra una tabella padre e una tabella figlio di un DataSet.

I vincoli specificati in un oggetto DataRelation vengono implementati mediante la creazione automatica di oggetti appropriati o l'impostazione di proprietà. Se si crea un vincolo di chiave esterna utilizzando l'oggetto DataRelation, vengono aggiunte istanze della classe ForeignKeyConstraint alla proprietà ChildKeyConstraint di tale oggetto.

Per implementare un vincolo UNIQUE è sufficiente impostare la proprietà Unique di una colonna dati su true oppure aggiungere un'istanza della classe UniqueConstraint alla proprietà ParentKeyConstraint dell'oggetto DataRelation. Per informazioni sulla sospensione dei vincoli in un dataset, vedere Procedura: disattivare i vincoli durante il riempimento di un dataset.

Regole di integrità referenziale

Nel vincolo della chiave esterna è possibile specificare le regole di integrità referenziale applicate nei seguenti tre casi:

  • Quando viene aggiornato un record padre

  • Quando viene eliminato un record padre

  • Quando viene accettata o rifiutata una modifica

Le regole disponibili sono specificate nell'enumerazione Rule ed elencate nella tabella riportata di seguito.

Regola di vincolo della chiave esterna

Azione

Cascade

La modifica (aggiornamento o eliminazione) effettuata nel record padre viene apportata anche nei record correlati della tabella figlio.

SetNull

I record figlio non vengono eliminati, ma la relativa chiave esterna viene impostata su DBNull. Con questa impostazione, i record figlio possono restare isolati, ovvero privi di relazione con i record padre.

NotaNota
L'utilizzo di questa regola può determinare la generazione di dati non validi nella tabella figlio.

SetDefault

La chiave esterna nei record figlio correlati viene impostata sul valore predefinito, determinato dalla proprietà DefaultValue della colonna.

None

Ai record figlio non vengono apportate modifiche. Con questa impostazione, i record figlio possono contenere anche riferimenti a record padre non validi.

Per ulteriori informazioni sugli aggiornamenti nelle tabelle del dataset, vedere Salvataggio dei dati nei dataset.

Relazioni di solo vincolo

Quando si crea un oggetto DataRelation, è possibile specificare che la relazione potrà essere utilizzata solo per attivare vincoli e non per accedere ai record correlati. Questa opzione consente di generare un Dataset un po' più efficace e dotato di un numero inferiore di metodi rispetto a un Dataset con funzionalità di accesso ai record correlati. Non sarà, tuttavia, possibile accedere ai record correlati. Una relazione di solo vincolo, ad esempio, impedisce l'eliminazione di un record padre che include ancora elementi figlio e non consente di accedere ai record figlio attraverso l'elemento padre.

Vedere anche

Riferimenti

DataRelation

GetChildRows

GetParentRows

Configurazione guidata origine dati

Concetti

Utilizzo di dataset in Visual Studio

Progettazione DataSet

Altre risorse

Preparazione dell'applicazione al ricevimento di dati

Modifica di dati nell'applicazione