Παντού διαβάζουμε ότι τα DataContext δεν προτείνεται να έχουν διάρκεια ζωής περισσότερο από ... δευτερόλεπτα.
Τους τελευταίους μήνες εργάστηκα σε μια εφαρμογή όπου για λόγους χρόνου, συστηματικά παρέβησα την συμβουλή αυτή. Έχοντας
λάβει όμως badget για δημιουργία 2ης έκδοσης, θα ήθελα να προσπαθήσω να δω πώς μπορώ να την ακολουθήσω.
Το σενάριο που με αναγκάζει να διατηρώ ανοικτό το DC μου για αρκετή ώρα είναι το ακόλουθο:
Διαχειρίζομαι φόρμες συντήρησης εγγραφών. Οπότε επιλέγοντας μια εγγραφή από τις διαθέσιμες πρέπει να μπορώ να δω και να μεταβάλλω ό,τι κρέμμεται
από αυτήν. Έτσι μπορώ να αλλάζω τα properties της εγγραφής αλλά, να προσθέτω συσχετήσεις με άλλες εγγραφές (μέσα από κάποιο Grid, στην ίδια φόρμα),
να διαγράφω παλαιές συσχετίσεις ή κάποια από αυτές που μόλις προσέθεσα και ακόμα δεν έχω κάνει persist.
Επίσης συμβαίνει στην ίδα φόρμα, να διαχειρίζομαι συσχετίσεις πολλάπλών επιπέδων (π.χ. Α<-(1:*)->B<-(1:*)->C).
Φυσικά όλες αυτές οι αλλαγές θα πρέπει να γίνουν persist όταν ο χρήστης αποφασίσει, και αν (μπορεί να κάνει undo).
Αυτό που μέχρι τώρα κάνω είναι να έχω ένα κέντρικό DC για την Φόρμα από το οποίο σε πρώτη φάση εμπλουτίζω τα Grids των εγγραφών μου
και παραμένει ενεργό μέχρι να γίνει κάποιο SubmitChanges οπότε και το κάνω Refresh.
Αν την ώρα που πάω να κάνω SubmitChanges συμβεί κάποιο conflict, έχω γράψει έναν generic μηχανισμό που ανάλογα με το είδος του conflict,
και σε συνεργασία με τον χρήστη, αποφασίζει για το αν θα κάνει Replace ή undo.
Ο άλλος τρόπος που σκέφτομαι (και ίσως από άγνοια κάνω λάθος) είναι να δουλέψω με collections αντικειμένων. Αυτό όμως προϋποθέτει ότι θα πρέπει να έχω κάνει pre-cache μεγάλο
όγκο δεδομένων, χωρίς απαραίτητα να αποφεύγω τα conflicts.
Πώς είναι δυνατό να κάνω χρήση του DC μόνο στο Load και στα Delete-Update-Insert και στο ενδιάμεσο να δουλεψω αποδοτικά μόνο με collections?
Ή μήπως υπάρχει άλλος τρόπος?
Ευχαριστώ.