Cenni preliminari sull'aggiornamento gerarchico
Aggiornamento: novembre 2007
Per aggiornamento gerarchico si intende il processo con il quale i dati aggiornati da un dataset con due o più tabelle correlate vengono salvati in un database rispettando allo stesso tempo l'integrità referenziale. Con integrità referenziale si fa riferimento alle regole di coerenza fornite dai vincoli di chiave esterna di un database che controllano il comportamento delle operazioni di inserimento, aggiornamento ed eliminazione dei record correlati. Ad esempio, l'integrità referenziale fa in modo che il record di un cliente venga creato prima degli ordini di tale cliente.
Quando in Visual Studio 2005 e versioni precedenti gli sviluppatori creavano le applicazioni dati, il codice generato automaticamente salvava i dati modificati solo nella prima tabella trascinata dalla finestra Origini dati. Quando si trascinavano le altre tabelle dalla finestra Origini dati, gli utenti dovevano aggiungere manualmente il codice per salvare le modifiche di tali tabelle nel database. Gli utenti non solo dovevano aggiungere il codice per chiamare il metodo TableAdapter.Update per ogni tabella, ma era anche necessario incorporare la logica per eseguire i comandi di inserimento, aggiornamento ed eliminazione specifici nell'ordine appropriato per ogni tabella in modo da non violare l'integrità referenziale. Ad esempio, i nuovi clienti devono essere salvati prima di poter aggiungere i relativi ordini e gli ordini devono essere eliminati prima di poter rimuovere un cliente esistente.
In Visual Studio 2008 i dataset tipizzati sono stati migliorati mediante un nuovo componente TableAdapterManager. TableAdapterManager riduce il codice necessario per salvare i dati in più tabelle correlate da diverse routine contenenti molte righe di codice a una sola chiamata al metodo TableAdapterManager.UpdateAll(TypedDataset). TableAdapterManager fornisce tutta la logica sottostante necessaria per mantenere l'integrità referenziale durante le operazioni di aggiornamento (salvataggio) tra il dataset e il database. Per ulteriori informazioni, vedere Panoramica di TableAdapterManager.
Attivazione dell'aggiornamento gerarchico in un dataset
Per impostazione predefinita, l'aggiornamento gerarchico viene attivato per tutti i nuovi dataset aggiunti o creati in un progetto. Attivare o disattivare l'aggiornamento gerarchico impostando la proprietà Aggiornamento gerarchico di un dataset tipizzato in Progettazione DataSet su True o False. Per informazioni dettagliate, vedere Procedura: attivare e disattivare l'aggiornamento gerarchico.
Vincoli di chiave esterna e aggiornamenti ed eliminazioni a catena
È importante comprendere come vengono creati i vincoli di chiave esterna e il comportamento a catena nel database all'interno del codice del dataset generato.
Per impostazione predefinita, le tabelle dati di un dataset vengono generate con relazioni (DataRelation) che corrispondono alle relazioni presenti nel database. Tuttavia, la relazione nel dataset non viene generata come vincolo di chiave esterna. L'oggetto DataRelation viene configurato come Solo relazione con la proprietà UpdateRule o DeleteRule non attiva.
Per impostazione predefinita, gli aggiornamenti e le eliminazioni a catena sono disattivati anche se la relazione del database è impostata con gli aggiornamenti e/o le eliminazioni a catena attivati. Ad esempio, sei si crea un nuovo cliente e un nuovo ordine e si tenta di salvare i dati, si può causare un conflitto con i vincoli di chiave esterna definiti nel database. Per ulteriori informazioni, vedere Procedura: configurare i vincoli di chiave esterna in un dataset.
Impostazione dell'ordine di esecuzione degli aggiornamenti
Impostando l'ordine di esecuzione degli aggiornamenti, si imposta l'ordine di esecuzione dei singoli comandi di inserimento, aggiornamento ed eliminazione necessari per salvare tutti i dati modificati in tutte le tabelle di un dataset. Quando viene attivato l'aggiornamento gerarchico, i comandi vengono eseguiti in base al seguente ordine predefinito: inserimento, aggiornamento ed eliminazione. TableAdapterManager fornisce la proprietà UpdateOrder che può essere impostata per eseguire prima il comando di aggiornamento, quindi il comando di inserimento e infine il comando di eliminazione.
Nota: |
---|
È importante comprendere che l'ordine di aggiornamento prevede l'esecuzione di tutti e tre i comandi. In altri termini, quando si eseguono gli aggiornamenti, vengono eseguiti i comandi di inserimento, aggiornamento ed eliminazione per tutte le tabelle del dataset esattamente in questo ordine. |
Per impostare la proprietà UpdateOrder, fare clic su TableAdapterManager nella barra dei componenti e impostare la proprietà UpdateOrder nella finestra Proprietà dopo avere trascinato gli elementi dalla Finestra Origini dati in un form. Per ulteriori informazioni, vedere Procedura: impostare l'ordine per l'esecuzione di un aggiornamento gerarchico.
Creazione di una copia di backup di un dataset prima dell'esecuzione di un aggiornamento gerarchico
Quando si salvano i dati chiamando il metodo TableAdapterManager.UpdateAll(), TableAdapterManager tenta di aggiornare i dati per ogni tabella in una singola transazione. Se una parte dell'aggiornamento di una tabella non viene eseguito correttamente, viene ripristinato lo stato precedente dell'intera transazione. Nella maggior parte dei casi, ripristinando lo stato precedente della transazione, si ripristina lo stato originale dell'applicazione. Talvolta può invece essere necessario ripristinare il dataset dalla copia di backup, ad esempio quando si utilizzano i valori a incremento automatico. Se un'operazione di salvataggio non viene eseguita correttamente, i valori a incremento automatico non vengono reimpostati nel dataset, che continuerà a creare valori a incremento automatico lasciando un vuoto nella numerazione, che può non essere accettabile nell'applicazione. Nei casi in cui tale condizione rappresenta un problema, TableAdapterManager fornisce una proprietà BackupDataSetBeforeUpdate che sostituisce il dataset esistente con una copia di backup se la transazione ha esito negativo.
Nota: |
---|
La copia di backup è solo in memoria durante l'esecuzione del metodo TableAdapterManager.UpdateAll. Non viene pertanto fornito l'accesso a livello di codice a questo dataset di backup, che viene utilizzato solo nel caso in cui sia necessario sostituire il dataset originale e non sarà più valido al termine dell'esecuzione del metodo TableAdapterManager.UpdateAll. |
Vedere anche
Attività
Procedura dettagliata: salvataggio dei dati dalle tabelle dati correlate (aggiornamento gerarchico)
Concetti
Panoramica di TableAdapterManager