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

 

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

EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

Îåêßíçóå áðü ôï ìÝëïò pontifikas. Τελευταία δημοσίευση από το μέλος nikolaosk στις 30-04-2012, 00:15. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-04-2012, 20:02 70139

    EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Πώς θα μπορούσα να το κάνω αυτό χωρίς να χρειάζεται κάθε φορά που κάνω μια αλλαγή/προσθήκη στην βάση μου, να μοντάρω
    κάποιο Τ4 template;

    Ευχαριστώ.
  •  27-04-2012, 10:11 70140 σε απάντηση της 70139

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Αυτά για όσους λένε "πολύ ώριμο" το EF4. Και φυσικά να μην ρωτήσω τί σε έπιασε και χρησιμοποιείς EF όταν όλος ο κόσμος χρησιμοποιεί NHibernate, ε?

    Λίγο πιο σοβαρά, η συχνή δημιουργία κλάσεων από τη βάση είναι anti-pattern. Είναι "ανάποδη" καθώς κατά κανόνα οι αλλαγές κατά το development προέρχονται από αλλαγή στη σχεδίαση των κλάσεων, όχι της βάσης. Και δεν συζητάμε ότι κατά κανόνα αυτό που αλλάζει πιο συχνά είναι ο κώδικας στις μεθόδους και όχι τα πεδία.
    Αν ξαναδημιουργείς τις κλάσεις από τη βάση, τί γίνεται με τον κώδικα σου? Ναι, τον έχεις σε partial κλάσεις αλλά τί γίνεται όταν προστίθενται ή χειρότερα αφαιρούνται πεδία? 

    Μόνο αν έχεις ήδη έτοιμη μία βάση (legacy βάση δηλαδή) έχει νόημα να φτιάξεις κλάσεις "στα γρήγορα" και μετά να συνεχίσεις το development ανεξάρτητα. Ακόμα κι έτσι μιλάμε για quick fix γιατί πάντα χρειάζονται διαφοροποιήσεις στον κώδικα που κάνουν απαραίτητη την τροποποίηση των κλάσεων που δημιουργούνται. Δεν θα βάλεις inheritance, validations, δεν θα αλλάξεις τα πεδία, δεν θα προσθέσεις κάποια άλλη λογική? Θα τα ξαναφτιάχνεις αυτά κάθε φορά που κάνεις regenerate?

    Με άλλα λόγια θα έπρεπε να κοιτάς το Code First, όχι το πως να ξαναδημιουργήσεις τις κλάσεις όταν αλλάζει η βάση.  Ο μόνος λόγος που όσοι χρησιμοποιούν EF ξεκινάνε από τη βάση είναι ότι ως τώρα το framework και το εργαλείο (Visual Studio) δεν μπορούσαν να χειριστούν σωστά το mainstream σενάριο.

    Συγκεκριμένα για την ερώτηση σου τέλος, θα πρέπει να κοιτάξεις το DbContext του EF 4.1 και το DbContext generator. Ο generator προσθέτει  Τ4 templates για να φτιάξει POCO κλάσεις από ένα μοντέλο EF . Προφανώς μπορείς να πειράξεις το template για να πετύχεις αυτό που θέλεις. Ένα walkthrough υπάρχει εδώ

    Το EF 4.1 επιτρέπει σε σημαντικό βαθμό και το mainstream scenario, το Code First. Walkthrough γι αυτό θα βρεις εδώ.




    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-04-2012, 12:22 70143 σε απάντηση της 70140

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Σε ευχαριστώ για την απάντησή σου Παναγιώτη. Εν τέλη χρησιμοποίησα τον Default code generator γιατί δεν ήθελα να μπλέξω με
    "notify change" κώδικα στα properties μου.
    Ίσως ο λόγος που "όλος" ο κόσμος χρησιμοποιεί το nHibernate είναι ότι μέχρι τώρα η MS είχε το EF σε πολύ "άσχημη" κατάσταση.
    Με το EF αναντίρρητα να ωριμάζει, η αναγκαιότητα στο μέλλον της χρήσης ενός μή Ms υποστηριζόμενου (και μάλιστα open source)
    ORM θα αρχίσει να μικραίνει(πιθανόν).
    Πρόσθεσε σε αυτό και διάφορα στοιχεία εφαπτόμενα με την πολιτική μιας εταιρίας, και θα καταλήξεις στην βάση που στοιχειοθέτησε την
    επιλογή αυτή.
  •  27-04-2012, 12:38 70144 σε απάντηση της 70143

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Δεν θα έλεγα ότι μειώνεται. Από τη μία το NHibernate δεν "κάθεται", από την άλλη υπάρχουν ακόμα σοβαρά προβλήματα στο EF, για παράδειγμα η ανάγκη ακόμα να κάνεις compile τα queries για να μην δεις χοντρή καθυστέρηση είναι μεγάλο πρόβλημα. Το ότι θα λυθεί στην επόμενη έκδοση δεν σημαίνει ότι δεν είναι πρόβλημα τώρα - ή ότι υπάρχουν δεν και πολλά άλλα θέματα.

    Επιπλέον, οι λύσεις που εισάγονται δεν είναι και τόσο καθαρές όσο θα έπρεπε, ενώ τα μπαγκάζια των διπλών (και πλέον περιττών) μοντέλων στο XML θα τα κουβαλάμε για καιρό. 

    Από την άλλη υπάρχουν ήδη πάρα πολλά open source projects, βιβλιοθήκες, frameworks, εργαλεία τα οποία χρησιμοποιούν ΝΗ. Δεν ξέρω κανένα να χρησιμοποιεί EF (άντε είδα 1-2 τώρα που googlαρα). 
    Και ο μοναδικός profiler για EF είναι 

    Να το πω αλλιώς, το NH δεν είναι απλά ώριμο, είναι και το καθιερωμένο και με ευρεία υποστήριξη. Το EF είναι αυτό που προσπαθεί να πείσει αλλά ακόμα δεν έχει φτάσει το καθιερωμένο και του λείπει η υποστήριξη.

    Από εκεί καταλήγω και στο ότι η απόφαση της εταιρείας που είπε EF βασίστηκε σε προσδοκίες ότι "κάποτε θα είναι αρκετά καλό" και χρεώνεται τώρα το κόστος του ότι ΔΕΝ είναι. Με άλλα λόγια, δεν ήταν τόσο λογική όσο νομίζανε.

    Υ.Γ. Και μην ξεχνάμε και το θέμα του support, το οποίο σαφώς υπολείπεται στο EF. Τα bug στο NH διορθώνονται γρήγορα, ενώ για να βγει fix στο EF θα πρέπει να μπει στο release schedule της MS. Επίσης μπορείς να βρεις εύκολα fixes για το NH, είτε με τη μορφή patches είτε ως κώδικα. Για να πάρεις patch ή κώδικα από την MS θα πρέπει να έχεις ΠΟΛΥ ακριβό συμβόλαιο υποστήριξης.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-04-2012, 15:02 70162 σε απάντηση της 70144

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Δεν έχω δουλέψει με το NH οπότε θα δεχτώ ότι είναι πολύ πιο ώριμο σε σχέση με το EF. Η αλήθεια είναι ότι το EF έχει ωριμάσει πολύ από την έκδοση 1.0 και υποστηρίζει πέρα από το Model First/Code First μια σειρά από νέα features (enums,spatial data types,table - valued functions) που επιτακτικά ζητούσαν οι developers.

    Όσο αφορά το performance (ποτέ δεν είναι κανείς ευχαριστημένος με το Performance) παραμπέμπω σε παλιότερο post μου. 

    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  29-04-2012, 19:21 70163 σε απάντηση της 70144

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Παναγιώτης Καναβός:
    Δεν θα έλεγα ότι μειώνεται. Από τη μία το NHibernate δεν "κάθεται", από την άλλη υπάρχουν ακόμα σοβαρά προβλήματα στο EF, για παράδειγμα η ανάγκη ακόμα να κάνεις compile τα queries για να μην δεις χοντρή καθυστέρηση είναι μεγάλο πρόβλημα. Το ότι θα λυθεί στην επόμενη έκδοση δεν σημαίνει ότι δεν είναι πρόβλημα τώρα - ή ότι υπάρχουν δεν και πολλά άλλα θέματα.

    Επιπλέον, οι λύσεις που εισάγονται δεν είναι και τόσο καθαρές όσο θα έπρεπε, ενώ τα μπαγκάζια των διπλών (και πλέον περιττών) μοντέλων στο XML θα τα κουβαλάμε για καιρό. 
    Από την άλλη υπάρχουν ήδη πάρα πολλά open source projects, βιβλιοθήκες, frameworks, εργαλεία τα οποία χρησιμοποιούν ΝΗ. Δεν ξέρω κανένα να χρησιμοποιεί EF (άντε είδα 1-2 τώρα που googlαρα). 
    Και ο μοναδικός profiler για EF είναι 

    Να το πω αλλιώς, το NH δεν είναι απλά ώριμο, είναι και το καθιερωμένο και με ευρεία υποστήριξη. Το EF είναι αυτό που προσπαθεί να πείσει αλλά ακόμα δεν έχει φτάσει το καθιερωμένο και του λείπει η υποστήριξη.
    Από εκεί καταλήγω και στο ότι η απόφαση της εταιρείας που είπε EF βασίστηκε σε προσδοκίες ότι "κάποτε θα είναι αρκετά καλό" και χρεώνεται τώρα το κόστος του ότι ΔΕΝ είναι. Με άλλα λόγια, δεν ήταν τόσο λογική όσο νομίζανε.
    Υ.Γ. Και μην ξεχνάμε και το θέμα του support, το οποίο σαφώς υπολείπεται στο EF. Τα bug στο NH διορθώνονται γρήγορα, ενώ για να βγει fix στο EF θα πρέπει να μπει στο release schedule της MS. Επίσης μπορείς να βρεις εύκολα fixes για το NH, είτε με τη μορφή patches είτε ως κώδικα. Για να πάρεις patch ή κώδικα από την MS θα πρέπει να έχεις ΠΟΛΥ ακριβό συμβόλαιο υποστήριξης.

    Καλά γίνεσαι πολύ κακός με το EF, και δεν νομίζω ότι το αξίζει:

    • Το compiled queries για το ObjectContext υπάρχουν από την έκδοση 1 - αν θα πρέπει να περιμένει κάποιος την έκδοση 5 (3η έκδοση) για να τα δει και για το DbContext, είναι ένα ερώτημα που παίρνει συζήτηση, αν το θες και που.
    • Το .edmx, είναι πολύ πιο χρήσιμο από το .xml του NHiberbate που περιέχει το conceptual model, το mapping και hints για το physical -> το .edmx περιέχει και το physical model, το conceptual model και το mapping μεταξύ τους. Με τα T4 templates, όποιος έχει φτιάξει ένα .edmx, μπορεί να βγάλει ότι θέλει από μέσα ότι θέλει, όπως το θέλει -επ' ακριβώς-.
    • To ότι το EF έρχεται να καλύψει ότι σενάριο ανάπτυξης υπάρχει - και μόνο με το κριτήριο αυτό - να το συγκρίνεις στην συνέχεια με το NHibernate - που είναι στην "πιάτσα" περισσότερο -  ενώ το δευτερο δεν έχει, αλλά ούτε θα έχει, τον ίδιο σκοπό, κάνεις μια σύγκριση μεταξύ τους που είναι ανεπιτυχής. Και ας μην μιλήσουμε για learning curve...
    • O ίδιος που έχει φτιάξει τον profiler για το NHibernate έχει φτιάξει και profiler για το EF, ο Ayende. Αλλά για τον EF δεν είναι μόνο αυτός, υπάρχει o Huagati Query Profiler και άλλος ένας που μου διαφεύγει.
    • Για το θέμα του support του NHibernate, να μου επιτρέψεις να διαφωνίσω - το NHibernate είναι ένα ωραίο προιόν, αλλά όταν θα έρθει η ώρα για το "σοβαρό" support θα το πληρώσεις πολύ ακριβά - μην σου πω ότι θα πρέπει να έρθει και ο ίδιος ο Ayende. Από την άλλη μεριά στο support προς την Microsoft είναι απλά μια διαδικασία...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  30-04-2012, 00:15 70171 σε απάντηση της 70163

    Απ: EF4: Αυτόματο Generation κλάσεων που δεν κάνουν Inherit από το EntityObject αλλά από κάποια άλλη κλάση.

    Γιώργο μάλλον εννοείς τους Tracing Provider Wrappers από τον Jaroslaw Kowalski...δες ένα post μου εδώ

    Φυσικά το καλύτερο εργαλείο-Profiler είναι αυτό το οποίο το έχει φτιάξει ο Ayende (Oren Eini).Θα πρέπει να αναφέρεσαι στο Εntity Framework Profiler .Αν και είναι paid application πραγματικά είναι καταπληκτικό.

    Έχω γράψει ένα μικρό post για αυτό εδώ

    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems