Υποσχέθηκα μια απάντηση αλλά την άργησα λίγο, οπότε έχουμε και λέμε..
Όπως κατάλαβες δεν μπορείς να συγκρίνεις ORM και να επιλέξεις ένα ORM εάν δεν ξέρεις τι ακριβώς θες να κάνεις.
Το XPO σου δίνει την δυνατότητα είτε να φτιάξεις μια κλάση και να φτιάξει αυτό τα κλειδιά και τον πίνακα στην βάση, είτε να δέσεις μια ήδη φτιαγμένη βάση με τον κώδικά σου.
Μπορείς να χειριστείς αρκέτα efficiently το Locking και μάλιστα διαφορετικό ανα class, όπως επίσης μπορείς να έχεις και πεδία τα οποία δεν θα αποθηκεύονται στην βάση, αλλά θα υπάρχουν στην class. Μπορείς να φτιάξεις πολύ εύκολα associations μεταξύ των κλάσεων σου και το XPO θα φτιάξει και να αντίστοιχα κλειδιά/πίνακες ανάλογα εάν είναι One to many ή many to many. Μην περιμένεις όμως κανένα καλό και πολυ ψαγμένο designer καθώς το 95% της δουλειάς γίνεται μέσω Attributes στις κλάσεις, οπότε δεν χρειάζεσαι και κάτι ιδιαίτερο απο designer. Γενικά ειναι ένα πάρα πολυ καλό ORM, πολύ ώριμο πλέον και με παρα πολλές δυνατότητες. Αλλα δυστυχώς, παρόλες τις παραξενιές που έχει το EF (Entity Framework) είναι πιο μπροστά απο το XPO καθώς "δένει" πιο εύκολα με άλλες τεχνολογίες της Microsoft όπως WCF, Sync Framework κλπ. Όχι ότι το XPO δεν δένει, μάλιστα έχει και ειδικό παράδειγμα πως να φτιάξεις ένα WCF Service να παίζει με XPO αλλά πως να το κάνουμε, άλλο να το βγάζει η μαμά εταιρία κι άλλο να το κάνεις εσύ. Αυτό που δεν μου άρεσε στο EF είναι οτι σε περιορίζει σε ορισμένες καταστάσεις να τις κάνεις αναγκαστικά όπως θέλει αυτό. Ναι ξέρω ότι δεν πρέπει να με ενδιαφέρει το index key generation, ναι ξέρω ότι δεν πρέπει να με ενδιαφέρει πως ακριβώς χειρίζεται το saving των objects αλλα θέλω να μπορώ να τα πειράξω κι όχι να τα κάνει αυτό όπως θέλει. Εάν ήσουν στο Event θα καταλάβεις τι εννοώ (περι keys κλπ), καθώς ο Γιώργος χτυπιόταν πόση ώρα γι'αυτό το θέμα. Ένα μικρό μειονέκτημα του EF είναι ότι εάν δεν υπάρχει συμβατός ADO.Net Provider τότε δεν υποστηρίζετε η βάση, ενώ το XPO υποστηρίζει ένα κάρο απο αυτές (MySQL, MSSQL, Firebird, VistaDB, FoxPro κλπ) και λέω μικρό καθώς όλες οι "μεγαλές" βάσεις έχουν ADO.Net Provider, οπότε.. Επίσης, δεν μπορεί να χειριστεί UDT στον SQL Server ενώ το XPO μπορεί, καθώς το "καταλαβαίνει" απο το πως είναι δηλωμένο στην class, ενώ υπάρχει θέμα και με το Inheritance.. Πάντως κι αυτά είναι "μικρά" καθώς είναι limitations τα οποία με τον ένα ή τον άλλο τρόπο λύνονται και σίγουρα στο μέλλον θα "εξαφανιστούν" όσο ωριμάζει περισσότερο το προϊόν..
Γνώμη μου: Μάθετα και τα δύο, έχουν μικρό learning curve, θα δεις κι εσύ τι σε βολεύει καλύτερα και πως μπορείς καλύτερα να δουλέψεις. Σε πολλά project χρησιμοποιώ XPO καθώς "δένει" με τα άλλα components της DevExpress πανεύκολα, ενώ σε άλλα χρησιμοποιώ το EF γιατί θέλω κι άλλες τεχνολογίες "τριγύρω" (όπως ανέφερα παραπάνω). Εδώ σε ορισμένες περιπτώσεις έχω χρησιμοποιήσει και SubSonic το οποίο δεν είναι ακριβώς ORM αλλά τέλως πάντων. Εν κατακλείδι, πάντα είναι θέμα τι θες να κάνεις και τι requirements έχεις για να αποφασίσεις αλλά για να μπορείς να κρίνεις και να επιλέξεις θα πρέπει να "μπλεχτείς" με 2-3 απο αυτά και να χρησιμοποιήσεις γιατί ότι και να λέμε εμείς, σε εφαρμογές πχ. του 600ρικου δεν αξίζει ο κόπος να μπλέκεις με XPO και EF κλπ.. Subsonic και καθάρισες ενώ σε άλλη περίπτωση το SubSonic είναι απλά ένα πρόβλημα απο μόνο του κι όχι λύση.
ΥΓ. Δεν προλαβαίνω να ξαναδιαβάσω τι έγραψα, άμα δεν βγάζουν νόημα, θα το διορθώσω..
Παναγιώτης Κεφαλίδης
"Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους
όρους χρήσης.