Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Entity Framework detached entities

Îåêßíçóå áðü ôï ìÝëïò Markos. Τελευταία δημοσίευση από το μέλος Markos στις 11-01-2010, 18:53. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-01-2010, 00:43 56328

    Entity Framework detached entities

    Αυτόν τον καιρό ασχολούμαι να φτιάξω ένα generic DAL για EF ver1.0 ώστε να δουλεύω μόνο με detached entities. Το πρόβλημα, βέβαια, είναι ότι χάνω το change tracking. Αναγκαστικά, λοιπόν, θα πρέπει να φτιάξω - μιας και από ό,τι είδα δεν υπάρχει κάποια έτοιμη κλάση - ένα collection το οποίο θα μου χρησιμεύσει στο binding, αλλά να υποστηρίζει change tracking. Ο πιο κατάλληλος υποψήφιος, από τον οποίο σκέφτομαι να κάνω inherit, είναι το ObservableCollection. Υπάρχουν, όμως, κάποια ζητήματα που αφορούν στο EntityKey. Ενώ τα νέα entities μπορούν εύκολα ν' αναγνωριστούν, καθώς ακόμα κι αν το Key τους δεν είναι null είναι οπωσδήποτε temporary, τα inserts στο DAL θα πρέπει να επιστρέφουν ξανά τα ίδια entities με το permanent EntityKey (πέρα - δώθε δηλαδή). Βεβαίως, το collection θα πρέπει να "ενημερωθεί" με τα "νέα" entities, έτσι ώστε, αν χρειαστεί να χρησιμοποιηθούν σε άλλες εργασίες να μην θεωρούνται added, αλλά original. Το collection δε θα μιλάει με το DAL, καθώς αυτό το έργο θα το αναλάβει ένα ενδιάμεσο AdapterObject, το οποίο θα στέλνει τις μεταβολές στο DAL και θα ενημερώνει ύστερα το collection. Κάτι ανάλογο στο πρότυπο των DataSets και των TableAdapters.

    Η ερώτηση που θέλω να κάνω είναι, το σκέφτομαι καλά ή κάπου χάνω κάτι; Μήπως υπάρχει άλλος τρόπος και πάω να κάνω τα εύκολα δύσκολα; Εσείς πως έχετε λύσει το πρόβλημα του change tracking στον client, έτσι ώστε να ξέρετε τι θα στείλετε για αποθήκευση στο DAL;


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  11-01-2010, 01:05 56329 σε απάντηση της 56328

    Απ: Entity Framework detached entities

    Αν δεν κάνω λάθος,

    Χρειάζεσαι την Attach() μέθοδο που θα ξαναβάλεις μέσα στο context το detached entity και ανάλογα με το τι έχεις
    ορίσει σε κάθε field/property στο update check θα το ελέγξει.

    Μπορείς ακόμα να κάνεις manual check κάνοντας Re-Query στην βάση και ελέχοντας εσύ τα values (έχεις πρόσθετο round trip στην βάση έτσι όμως).

    Ακόμη μπορείς να βάλεις manual timestamp field στα tables, και να κάνεις έλεγχο βάση αυτού του πεδίου μόνο.
    Δές επίσης αυτό το Blog post που βρήκα στα γρήγορα για παράδειγμα.



  •  11-01-2010, 17:18 56358 σε απάντηση της 56329

    Απ: Entity Framework detached entities

    Γιώργο, όλ' αυτά είναι πράγματα που συμβαίνουν στο DAL. Επιπλέον, το requery στη βάση για την επανάκτηση της original τιμής δεν είναι αποδεκτό. Αυτό που μου έχει κάνει εντύπωση είναι ότι κανένα collection του framework δεν υποστηρίζει tracking για τα states των objects, καθώς και το γεγονός ότι δεν έχω δει κάποια custom υλοποίηση σε fora ή σε blogs ή σε κάποιο άρθρο. Αυτό με έβαλε σε σκέψη μήπως το να ασχοληθεί κάποιος με το συγκεκριμένο ζήτημα είναι τελικά ανούσιο.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  11-01-2010, 18:43 56361 σε απάντηση της 56358

    Απ: Entity Framework detached entities

    Μάλιστα, θές να δώσεις state στα dettached objects δηλαδή και να μπορεί αυτό να το καταλαβαίνει και το Entity Framework όταν κάνεις το entity attach στο context!?
    Γιατί ούτως η άλλως θα το ξαναβάλεις στο context όπου θα μπορείς να ελέγξεις με τους παραπάνω τρόπους ποιο είναι το state του.
    Αν είναι new, γίνεται αυτόματα ούτως ή άλλως όταν κάνεις .add(entity), μέτα τα υπόλοιπα γίνονται tracking από το context όπως είπα.

    Ελπίζω να καταλαβαίνω καλά τι εννοείς....



  •  11-01-2010, 18:53 56363 σε απάντηση της 56361

    Απ: Entity Framework detached entities

    Δε μπορείς να δώσεις state στα detached. Όταν τα κάνεις re-attach στο context το state τους θα είναι unchanged. Γι' αυτό πρέπει να στείλεις και το original μαζί με το modified και να καλέσεις το ApplyPropertyChanges για να ξέρει το context τι έχει αλλάξει και να στείλει τις αλλαγές στη βάση. Το θέμα είναι το collection στον client να σου επιστρέψει σε λίστες ή σε arrays τα modified, deleted και original entites για να πράξεις αναλόγως. Το πρόβλημα δεν είναι το DAL, αλλά το collection.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems