Αυτά για όσους λένε "πολύ ώριμο" το 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