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

Έχουν δημοσιευτεί 10 Ιανουαρίου 08 10:12 πμ | KelMan 

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

Σχόλια:

Χωρίς Σχόλια
Έχει απενεργοποιηθεί η προσθήκη σχολίων από ανώνυμα μέλη

Search

Go

Συνδρομές