TableAdapterManager: To παυσίπονο για τα hierarchical updates


To Visual Studio 2008 διαθέτει ένα νέο component που έρχεται να βοηθήσει στη χρήση των DataSets. Μέχρι σήμερα, αν είχαμε ένα DataSet που είχε δύο ή παραπάνω πίνακες με σχέσεις PK-FK και θέλαμε να κάνουμε update στα περιεχόμενα όλων των πινάκων θα έπρεπε να κάνουμε ένα ιεραρχικό update, δηλαδή να γίνει το update με σειρά όπως:

  • Insert στο master
  • Insert στο detail
  • Update στα details
  • Update στο master
  • Delete στα details
  • Delete στο master

Το παραπάνω γίνεται με λίγες γραμμές κώδικα, χρησιμοποιώντας την GetChanges. Για παράδειγμα, αν θέλουμε να πάρουμε μόνο τις εγγραφές για inserts, θα πρέπει να πούμε κάτι σαν το παρακάτω:

Dim newOrders As NorthwindDataSet.OrdersDataTable = _
    CType(NorthwindDataSet.Orders.GetChanges( _
          Data.DataRowState.Added), _
          NorthwindDataSet.OrdersDataTable)

OrdersTableAdapter.Update(newOrders)

Βέβαια, όταν υπάρχουν πιο περίπλοκες σχέσεις με περισσότερους πίνακες, τότε χρειάζεται να γραφτεί περισσότερος κώδικας και είναι ακόμα πιο δύσκολο να διατηρηθεί η σωστή σειρά στο ιεραρχικό update. Επιπρόσθετα, ενδεχομένως να χρειάζεται να διαχειριστούμε το connection state και το transaction καθώς και να κάνουμε χειροκίνητο refresh του DataSet.

Τη λύση στο πρόβλημα έρχεται να δώσει ο TableAdapterManager. Αυτό είναι ένα component που πλέον προστίθεται αυτόματα όταν κάνει κανείς drag’n’drop κάποιο datasource στη φόρμα. Ουσιαστικά, ο νέος DataSet designer κάνει generate αυτό το component εφόσον θέσουμε σε true το "Hierarchical Update" property στο DataSet. Κατόπιν, το μόνο που χρειάζεται είναι απλά να καλέσουμε την UpdateAll του TableAdapterManager. Το component έχει επίσης το property BackUpDataSetBeforeUpdate το οποίο όταν είναι true επαναφέρει στην προηγούμενη κατάσταση το DataSet σε περίπτωση αποτυχημένου transactional update.

Μπορείτε να διαβάσετε περισσότερα στο msdn

Advertisements


Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s