|
-
19-11-2008, 14:34
|
|
Hello, έχει χρησιμοποιήσει κάποιος linq σε web projects και να έχει μπλέξει και caching μαζί; Κάποια στρατηγική που να έχει δουλέψει; Γενικά, πως χρησιμοποιείτε linq σε web περιβάλλον;
(Ξέρω ότι τα objecτάκια του linq (to sql) δεν είναι cachable, ξέρω ότι το context έχει αντίληψη unit of work, ξέρω ότι γίνονται serialize μόνο σε xml).
Χρήστος Γεωργακόπουλος
|
|
-
19-11-2008, 19:52
|
|
Απ: Linq - Caching - Web?
Να προσθέσω ένα σχολιάκι για το LINQ (και αυτό προς συζήτηση): Είναι η τεχνολογία για την οποία είναι δημοσιευμένες το μεγαλύτερο πσοσοστό μπούρδων στο web. Είναι απίστευτο πόσο πολύ πέφτω σε blogs που πραγματικά γράφουν μπούρδες. Ίσως φαίνεται τόσο ελκυστικό που τραβάει ανθρώπους χωρίς εμπειρία να ασχοληθούν... και καλό και κακό...
Χρήστος Γεωργακόπουλος
|
|
-
19-11-2008, 21:39
|
-
Mitsaras
-
-

-
Μέλος από τις 12-09-2005
-
Θεσσαλονίκη
-
Δημοσιεύσεις 818
-
-
|
Απ: Linq - Caching - Web?
Σωτήρη, αν βρεις κάποια λογική λύση... let me know!
Το χρησιμοποίησα σε ένα μικρό ASP.net project, και ενώ "δουλεύει", αφ' ενός το μόνο caching που μπορώ να κάνω με ασφάλεια είναι συγκεκριμένα properties από αντικείμενα για εγγραφή (buffering στην ουσία και όχι ακριβώς caching), αφ' ετέρου το συγκεκριμένο webapplication μου δίνει σημαντικά μικρότερο αριθμό requests/sec. Εννοείται φυσικά ότι μελέτησα το παραγόμενο SQL και έχω δημιουργήσει τα κατάλληλα indices στην βάση.
Μην αφήνετε τα media να σας "ταΐζουν"!
|
|
-
19-11-2008, 23:19
|
|
Απ: Linq - Caching - Web?
Αν θέλεις να κάνεις cache objects τα οποία δεν αλλάζουν συχνά, και έχεις έλεγχο της cache την ώρα που αλλάζουν (π.χ. τη στιγμή του deployment), τότε δε σε εμποδίζει τίποτα να τα κρατήσεις in memory έξω από το DataContext που τα δημιούργησε. Δεν έχεις change notifications (πρέπει να υλοποιήσεις κάποιο μηχανισμό μόνος σου) και είναι μεγάλη φασαρία να ενημερώσεις από την cache πίσω τη βάση σου, αλλά π.χ. για τα configuration tables σου θα μπορέσεις να κάνεις caching μια χαρά.
Άλλου είδους caching σε web app θα έλεγα ότι είναι μάλλον μεγαλύτερος κόπος παρά κέρδος.
Νατάσα Μανουσοπούλου
|
|
-
20-11-2008, 00:12
|
-
Mitsaras
-
-

-
Μέλος από τις 12-09-2005
-
Θεσσαλονίκη
-
Δημοσιεύσεις 818
-
-
|
Απ: Linq - Caching - Web?
Άλλου είδους caching σε web app θα έλεγα ότι είναι μάλλον μεγαλύτερος κόπος παρά κέρδος.
Δεν είναι τόσο εύκολο το ζήτημα... Προτιμώ να δουλεύω με business objects παρά με DataSets. Με γνώμονα αυτό, το να δημιουργήσεις όλο το graph ενός αντικειμένου από την βάση, όταν αυτό έχει πολλά και διαφορετικά relations είναι χρονοβόρα διαδικασία (ειδικά όταν επαναλαμβάνεται αρκετά συχνά ανά δευτερόλεπτο). Το πρόβλημα είναι τα references αυτά καθ' αυτά τα οποία μπορεί να χρειαστεί να αντικατασταθούν κυρίως λόγω των διαφόρων λειτουργιών του caching μηχανισμού, όπως για παράδειγμα expiration, αντικατάσταση του αντικειμένου, και επιτυχές garbage collection χωρίς να υπάρχουν zombie references από αντικείμενα τα οποία έχουν γίνει expire αλλά κρατάνε ακόμα τις αναφορές τους. Κοντολογίς, το αντικείμενο έχει πολλά reads, δεν έχει συχνά writes, αλλά όποτε γίνεται write, πρέπει να ανανεώνεται η κατάστασή του άμεσα για λόγους integrity. Το ίδιο και με referenced αντικείμενα. Άρα δεν ταιριάζει μια μονολιθική cache, ούτε η απουσία της, και το CacheDependency δεν βολεύει ιδιαίτερα στην περίπτωσή μου. Για να λύσω το παραπάνω, τα αντικείμενα αποφεύγουν άμεσα references σε άλλα αντικείμενα τα οποία μπορεί να είναι κοινά και αλλού ή αν απλώς αλλάζουν συχνά (αλλά όχι τόσο συχνά ώστε να φορτώνονται από την βάση σε κάθε request). Αντ' αυτού, γνωρίζουν μόνο το Id του αντικειμένου που ζητάνε, και με τη χρήση κατάλληλων properties & ενός custom dictionary, η άμεση αναφορά στο αντικείμενο γίνεται delegated στον business layer (όπου αποφασίζει αν κάτι θα πρέπει να φορτωθεί από τη βάση ή από την Cache. Ο χρόνος που αναλώνεται με την χρήση delegates αντί για άμεσες αναφορές αυξάνει λίγο, αλλά ο sql server μου είναι ευτυχισμένος γιατί απαλάσσεται από ανούσια επαναλαμβανόμενα ερωτήματα! Πώς το επιτυγχάνεις κανείς αυτό με Linq λοιπόν;
Μην αφήνετε τα media να σας "ταΐζουν"!
|
|
-
20-11-2008, 10:42
|
|
Απ: Linq - Caching - Web?
Χρήστος Γεωργακόπουλος:Να προσθέσω ένα σχολιάκι για το LINQ (και αυτό προς συζήτηση): Είναι η τεχνολογία για την οποία είναι δημοσιευμένες το μεγαλύτερο πσοσοστό μπούρδων στο web. Είναι απίστευτο πόσο πολύ πέφτω σε blogs που πραγματικά γράφουν μπούρδες. Ίσως φαίνεται τόσο ελκυστικό που τραβάει ανθρώπους χωρίς εμπειρία να ασχοληθούν... και καλό και κακό...
Δεν μου φαίνεται περίεργο. Αυτοί που έχουν ήδη εμπειρία και ξέρουν να σου απαντήσουν είναι όσοι χρησιμοποιούν ORMs εδώ και καιρό, αν και αυτοί ασχολούνται περισσότερο με το Entity Framework πλέον. Όλοι οι άλλοι είναι καινούριοι οι οποίοι τώρα ανακαλύπτουν τα ORMs και τα παλούκια τους και κατά πάσα πιθανότητα αποφεύγουν να διαβάσουν καν για ORMs. Λογικό είναι μέχρι να μάθουν θα γράφουν άρθρα σχετικά χαμηλότερης ποιότητας.
Φαντάζεσαι ένα προγραμματιστή αποκλειστικά VB6 να γράφει για threads ή generics ?
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
20-11-2008, 11:36
|
|
Απ: Linq - Caching - Web?
Νατάσα Μανουσοπούλου:Αν θέλεις να κάνεις cache objects τα οποία δεν αλλάζουν συχνά, και έχεις έλεγχο της cache την ώρα που αλλάζουν (π.χ. τη στιγμή του deployment), τότε δε σε εμποδίζει τίποτα να τα κρατήσεις in memory έξω από το DataContext που τα δημιούργησε. Δεν έχεις change notifications (πρέπει να υλοποιήσεις κάποιο μηχανισμό μόνος σου) και είναι μεγάλη φασαρία να ενημερώσεις από την cache πίσω τη βάση σου, αλλά π.χ. για τα configuration tables σου θα μπορέσεις να κάνεις caching μια χαρά.
Άλλου είδους caching σε web app θα έλεγα ότι είναι μάλλον μεγαλύτερος κόπος παρά κέρδος.
Καλημέρα, το θέμα είναι ότι αν βάλω στο cache ένα object πχ product, σε ένα επόμενο request μπορεί κάποιος να χτυπήσει το product.supplier, το οποίο αν δεν είχε φορτωθεί αρχικά θα χτυπήσει, γιατί το context του συγκεκριμένου cachαρισμένου product έχει γίνει πλέον disposed. Keep in mind ότι ο κόσμος κάτω από το caching layer ας το πούμε έτσι, δεν έχει την παραμικρή ιδέα για το από που προήλθε το object, αν κάποιος το διάβασε από τη βάση και του το έδωσε, ή με κάποιο μαγικό τρόπο ήρθε από το cache. Ιδανικά θα ήθελα ο cache manager μου, μόλις πιάσει το object για να το σερβίρει, να δει ότι το context του είναι πεθαμένο, οπότε να το κάνει attach στο τρέχον, ενεργό context και να το δώσει σε αυτόν που το ζητάει (και να γινόταν attach και όλο το δέντρο του; περίεργο ακούγεται δεν ξέρω πως ακριβώς...). Το attach το λέω με την έννοια της λέξης, όχι με την έννοια του linq (desirialized object). Ουσιαστικά η μόνη λύση που θεωρητικά φαίνεται να δουλεύει, είναι να γίνουν serialized τα objects και να μπαίνουν στο cache, οπότε όντως ο cache manager να τα κάνει attach (με την έννοια του linq). Στην πράξη φοβάμαι ότι αυτό θα είναι παλαβό, σε κάθε request να γίνονται desirialized -> serialized όλα τα objects που χρησιμοποιούνται.
Χρήστος Γεωργακόπουλος
|
|
-
20-11-2008, 23:37
|
|
Απ: Linq - Caching - Web?
Αυτό ακριβώς είχα κατά νου όταν έγραφα ότι έχεις τον έλεγχο, ώστε φορτώνοντας το κατάλληλο τμήμα του reference tree με DataLoadOptions έχεις στα χέρια σου τα αντικείμενα που μπορεί να σου χρειαστούν και όχι παραπάνω. Σε περιορισμένα σενάρια χρήσης, και όταν υπάρχουν λίγες συσχετίσεις, ακόμα κι αυτό το απλοϊκό σενάριο μπορεί να φανεί χρήσιμο.
Στην πραγματικότητα, αν θέλεις εύκολο attach-detach, πρέπει να κοιτάξεις προς το EF.
Νατάσα Μανουσοπούλου
|
|
-
10-12-2008, 08:39
|
|
Απ: Linq - Caching - Web?
Χρήστος Γεωργακόπουλος:Καλημέρα, το θέμα είναι ότι αν βάλω στο cache ένα object πχ product, σε ένα επόμενο request μπορεί κάποιος να χτυπήσει το product.supplier, το οποίο αν δεν είχε φορτωθεί αρχικά θα χτυπήσει, γιατί το context του συγκεκριμένου cachαρισμένου product έχει γίνει πλέον disposed. Keep in mind ότι ο κόσμος κάτω από το caching layer ας το πούμε έτσι, δεν έχει την παραμικρή ιδέα για το από που προήλθε το object, αν κάποιος το διάβασε από τη βάση και του το έδωσε, ή με κάποιο μαγικό τρόπο ήρθε από το cache.
Ιδανικά θα ήθελα ο cache manager μου, μόλις πιάσει το object για να το σερβίρει, να δει ότι το context του είναι πεθαμένο, οπότε να το κάνει attach στο τρέχον, ενεργό context και να το δώσει σε αυτόν που το ζητάει (και να γινόταν attach και όλο το δέντρο του; περίεργο ακούγεται δεν ξέρω πως ακριβώς...). Το attach το λέω με την έννοια της λέξης, όχι με την έννοια του linq (desirialized object).
Ουσιαστικά η μόνη λύση που θεωρητικά φαίνεται να δουλεύει, είναι να γίνουν serialized τα objects και να μπαίνουν στο cache, οπότε όντως ο cache manager να τα κάνει attach (με την έννοια του linq). Στην πράξη φοβάμαι ότι αυτό θα είναι παλαβό, σε κάθε request να γίνονται desirialized -> serialized όλα τα objects που χρησιμοποιούνται.
Έχεις διαβάσει το "Object States and Change-Tracking (LINQ to SQL)"
George J.
|
|
-
11-12-2008, 08:21
|
-
azazeal
-
-

-
Μέλος από τις 08-02-2007
-
Athens, Greece
-
Δημοσιεύσεις 34
-
-
|
Απ: Linq - Caching - Web?
Τον τελευταίο καιρό χρησιμοποιώ τόσο το EF όσο και την Linq2Sql κατά βούληση: Το πρώτο σε μεγαλύτερα έργα και την δεύτερη σε μικρότερα.
Αυτό που θα σε συμβούλευα είναι το εξής (γιατί είδα κάπου πως είσαι από αυτούς που χρησιμοποιούν business objects αντί για datasets - όπως και εγώ): Τα objects της Linq2Sql μην τα χρησιμοποιείς σαν business objects, είναι καλύτερο να τα μετατρέπεις σε business objects. Ξέρω πως έτσι θα χάσεις το caching σου αλλά στη θέση σου δεν θα ανησυχούσα γιατί αυτό.
Το cache το χάνεις όποτε χάνεις και το context (σε web apps αυτό γίνεται υπερβολικά συχνότερα από όσο ίσως να φαντάζεσαι). Αν η εφαρμογή σου όντως είναι βαριά, το caching solution που σου προσφέρει η Linq σταματάει εξ' όρισμού (ανεξάρτητα από το πόσες πατέντες, σκάντζες, νέες θεωρίες και ώρες χαμένες θα δώσεις) όταν θα περάσεις στο στάδιο web farming (δεν ξέρω κατά πόσο βαρύ είναι αυτό που έχεις αλλά το να μιλάς για caching δεν μου αφήνει περιθώρια να μην φανταστώ για σένα το χειρότερο).
Τα caching που ακριβώς το κάνεις στο app σου; Στο application level; Στο user level; Πόσο ζει ένα LinqDataContext στην εφαρμογή σου; Πόσο παραπάνω βαραίνει την εφαρμογή το caching; Πόσο μεγάλο (σε bytes) φτάνει το xml cache της Linq; Μετά από 10 ώρες uptime η εφαρμογή θα φτάσει στο όριο της αν αρχίσει το λογιστήριο να *cacharei* (κατά λάθος) reports για τα τελευταία 10 χρόνια;
Το caching μπορεί να είναι σωτηρία αλλά και μεγάλο βάσανο. Γνώμη μου είναι πως αν όντως θες cache κάντο έξω από την Linq, με δικό σου τρόπο (το είχα ψάξει στην αρχή και εγώ αλλά δεν βρήκα τίποτα το οποίο να υπάρχει από default και να μου κάνει) και σε πράγματα τα οποία να έχει νόημα να το κάνεις.
Καλή τύχη.
|
|
-
11-12-2008, 12:42
|
-
DeClen
-
-

-
Μέλος από τις 11-12-2006
-
-
Δημοσιεύσεις 52
-
-
|
Απ: Linq - Caching - Web?
azazeal:
Τα objects της Linq2Sql μην τα χρησιμοποιείς σαν business objects, είναι καλύτερο να τα μετατρέπεις σε business objects.
Τώρα τελευταία προσπαθώ να βρω τον πιο "σωστό" τρόπο να το πετύχω αυτό. Κυρίως με το EF.
Συνήθως δουλεύω(-α) με 3 layers το οποία τα έσπαγα και σε 3 namespaces
(και class libraries): business objects (BO), data access (DAL),
business logic (BLL).
- Το DAL βλέπει μόνο το BO namespace (dump classes) και τη βάση και επιστρέφει BOs
- To BLL βλέπει τα DAL, ΒΟ namespaces και επιστρέφει BOs
- To presentation βλέπει μόνο τα BO, BLL namespaces.
Δεν ξέρω αλλά όλα αυτά μου φαίνονται πολύ καθαρά.
Από την άλλη, τo EF παράγει BOs (ουσιαστικά δεν είναι business objects, αλλά entity
objects) και το DAL πακέτο. Ας πούμε ότι το BLL επιστρέφει BOs στο
presentation με μεθόδος .First(), .ToList() κτλ. Για να μπορεί όμως το
presentation να παίξει με τα BOs θα πρέπει πλέον να βλέπει και το BLL
αλλά και το DAL μιας και εκεί ορίζονται τα objects που πηγαινοέρχονται.
Αυτό δεν μου πολυαρέσει...
Γενικά το ότι ουσιαστικά δεν έχω business objects, αλλά entity objects κάπως με χαλάει.
|
|
-
11-12-2008, 13:03
|
-
azazeal
-
-

-
Μέλος από τις 08-02-2007
-
Athens, Greece
-
Δημοσιεύσεις 34
-
-
|
Απ: Linq - Caching - Web?
Η λογική σου είναι εντελώς ΛΑΘΟΣ!!!!
Ποτέ .BO namespace αλλά .Entities namespace. Ποτέ BLL namespace αλλά .Business namespace. Ποτέ .DAL αλλά .DataAccessLayer namespace.
Δεν πάμε καλά σε αυτή τη χώρα...
Στα σοβαρά τώρα: Για κάθε object της Linq φτιάξε ένα extension να σου το μετατρέπει/αντιγράφει/κάνει-ότι-θέλει-και-συμφέρει-όταν-δεν-crashάρει στο αντίστοιχο του .Entities namespace και είσαι OK (π.χ. για το object .DataAccessLayer.Client φτιάξε το extension .ToClientEntity( ) το οποίο θα σου το μετατρέπει σε .Entities.Client). Είναι τεσταρισμένη μέθοδος, έχει δουλέψει, δεν παρουσιάζει προβλήματα με μόνο ένα catch: Οι μετατροπές πρέπει να γίνονται σε "ζωντανό" context, σου παραθέτω τα παρακάτω.
Linq2Sql object (σε παιδικό γράψιμο): Client { string ClientId, string Name, decimal Rate }
Έστω Χ (ψέμματα), έστω function (στο DAL σου) όπου E.Client το object σου στο .BO και C.Client το object σου στο .Dal
public E.Client GetClientById( string ClientId ) { using ( DbDataContext db = GetDb( ) ) { var query = ( from c in db.Clients orderby c.Name where c.ClientId.ToString( ) == ClientId select c );
if ( query.Count( ) == 1 ) return query.Single( ).ToClientEntity( ); /* Παρατήρησε το using μέσα στο οποίο καλείτε το .ToClientEntity( ) */
return null; } }
Και το κερασάκι (extension):
public static E.Client ToClientEntity( this C.Client Client ) { if( Client == null ) return ( E.Client )null;
E.Client ret = new E.Client( );
ret.ClientId = Client.ClientId.ToString( ); ret.Name = Client.Name; ret.Rate = Client.Rate;
return ret; }
Υ.Γ: Θα ήταν υπερβολικά πολύ να ζητήσω ένα db.SyntaxHighlighter ή υπάρχει ήδη υλοποιημένο και μόλις έγινα ρόμπα;
|
|
-
11-12-2008, 13:42
|
-
DeClen
-
-

-
Μέλος από τις 11-12-2006
-
-
Δημοσιεύσεις 52
-
-
|
Απ: Linq - Caching - Web?
azazeal:Η λογική σου είναι εντελώς ΛΑΘΟΣ!!!!
Ποτέ .BO namespace αλλά .Entities namespace. Ποτέ BLL namespace αλλά .Business namespace. Ποτέ .DAL αλλά .DataAccessLayer namespace.
Δεν πάμε καλά σε αυτή τη χώρα...
 Η λύση του extension method ομολογώ ότι είναι πολύ καλή  Ψάχνοντας στο web βρήκα διάφορες απόψεις για το θέμα. Μια άλλη υλοποίηση, με βάση το παράδειγμά μας, που βρήκα ενδιαφέρουσα (δεν κράτησα το link...) ήταν η εξής: - LINQ stuff : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [Table(κτλ.)] public partial class Client { private string _ClientId; private string _Name; private string _Rate; partial void OnCreated(); public Client() { OnCreated(); } [Column(κτλ.)] public string ClientId { //κτλ. } [Column(κτλ.)] public string Name { //κτλ. } [Column(κτλ.)] public string Rate { //κτλ. } } |
- Ορίζουμε το interface IClient 1 2 3 4 5 | public interface IClient { string ClientId { get; set; } string Name { get; set; } string Rate { get; set; } } |
- To business object μας 1 | public partial class Client : IClient { } |
Η αλήθεια είναι πως δεν το έχω δοκιμάσει για να δω αν δουλεύει σωστα. Ελπίζω το team του EF να μας βοηθήσει λίγο περισσότερο σε κάποια μελλοντική έκδοση...
|
|
-
11-12-2008, 16:01
|
|
Απ: Linq - Caching - Web?
Όλα όσα συζητάτε (και πολλά ακόμα) έχουν αντιμετωπιστεί ήδη από όλα τα άλλα ORM, κατά κανόνα με τη χρήση του Repository pattern. Έτσι αποφεύγεις να σκορπίσεις στα διάφορα layers θέματα που δεν τα αφορούν όπως το caching ή το transaction management. Χρησιμοποιώντας μάλιστα Generics δεν χρειάζεται να φτιάχνεις π.χ. GetClient(), αφού η μία και μοναδική Get<TEntity>() αρκεί. Μία αναζήτηση για NHibernate Repository θα επιστρέψει αρκετές ενδιαφέρουσες υλοποιήσεις. Δυστυχώς, η αναζήτηση για Linq to SQL Repository θα επιστρέψει λίγες και πολύ περιορισμένες. Είναι λες και όσοι δουλεύουν με Linq to SQL αγνοούν/αρνούνται να δούν και να χρησιμοποιήσουν τις δοκιμασμένες λύσεις που έχουν προηγηθεί. Μάλιστα, η παρόμοια συζήτηση Access DataContext μέσα από το object ήταν η αφορμή να φτιάξω σε 1 ωρίτσα (κώδικα+κείμενο) ένα απλό Repository το οποίο όμως χρησιμοποεί ξεχωριστές κλάσεις για να χρησιμοποιήσει διαφορετικές τακτικές διαχείρισης του DataContext και του Submit - χωρίς να αλλάζει ο κώδικας της ίδιας της Repository ή να επηρεάζει τα αντικείμενα. Δεν γίνεται να χρησιμοποιήσει κανείς την ίδια πολιτική για caching, transactions, conflict resolution σε κάθε περίπτωση, ακόμα και για το ίδιο αντικείμενο. Σε διαφορετικά use cases/σενάρια θέλεις οι αλλαγές να αποθηκεύονται άμεσα, σε διαφορετικά να μαζεύονται και να εκτελούνται ως batch κάποια στιγμή στο μέλλον. Όσον αφορά το caching γενικά, δεν υπάρχει η μία και μοναδική υλοποίηση. Πολύ, μα πολύ χονδρικά, υπάρχουν δύο σημεία στα οποία μπορεί να γίνει caching: - Εκτός του DataContext, ένα detached αντικείμενο μπορεί να αποθηκευθεί σε ένα οποιοδήποτε cache. Αυτό μπορεί να γίνει ανεξάρτητα από το ORM και έχει θέματα όπως το τί θα κάνεις cache, μόνο το αντικείμενο, το αντικείμενο και τα child αντικείμενα, κάτι άλλο?
- Εντός του DataContext μπορούν να αποθηκευθούν τα χύμα δεδομένα από τα οποία θα δημιουργηθεί ένα object όταν ζητηθεί. Αυτό ΔΕΝ γίνεται με το LINQ ενώ υποστηρίζεται από το EF και το NHibernate.
Η κάθε περίπτωση ταιριάζει σε διαφορετικά σενάρια. Είναι μεν πιο περίπλοκο να αποθηκεύω ολόκληρους γράφους στην cache, γλυτώνω όμως τον κόπο να τους φτιάξω ξανά. Από την άλλη, είναι πιο εύκολο κάποιο αντικείμενο στο γράφο να είναι invalid και να μην το καταλάβω. Αποθηκεύοντας όμως τα χύμα δεδομένα γλυτώνω από αυτό το πρόβλημα, αλλά κάθε φορά θα πρέπει να φτιάξω το γράφο από την αρχή.
Παναγιώτης Καναβός, Freelancer Twitter: http://www.twitter.com/pkanavos
|
|
-
11-12-2008, 20:10
|
-
azazeal
-
-

-
Μέλος από τις 08-02-2007
-
Athens, Greece
-
Δημοσιεύσεις 34
-
-
|
Απ: Linq - Caching - Web?
DeClen:- Ορίζουμε το interface IClient
1 2 3 4 5 |
public interface IClient { string ClientId { get; set; } string Name { get; set; } string Rate { get; set; } } | - To business object μας
1 |
public partial class Client : IClient { } |
Η αλήθεια είναι πως δεν το έχω δοκιμάσει για να δω αν δουλεύει σωστα.
Ελπίζω το team του EF να μας βοηθήσει λίγο περισσότερο σε κάποια μελλοντική έκδοση...
Αυτό πως σου λύνει το πρόβλημα με τα exceptions όταν το DataContext είναι disposed (σε περίπτωση που τα properties δεν είναι primitive data types δηλαδή;); Έχω την εντύπωση πως δεν στο λύνει...
Όσα έγραψε ο Καναβός από πάνω είναι πολύ ωραία, αρκεί να τα γράψεις μία φορά και παίζουν universally (αρκεί να βρεις το χρόνο). Πολλοί έχουν αφιερώσει το χρόνο τους στο να φτιάξουν δικές τους λύσεις ή να ακολουθήσουν το δρόμο που άνοιξαν οι άλλοι και επαναλαμβάνω πως όσα είπε ο Παναγιώτης είναι όντως πολύ σωστά αλλά υπάρχει ένας δρόμος στο να καταλάβει κάποιος πως δουλεύει ένα ORM και ο δρόμος αυτός είναι μακρύς και σε καμμία περίπτωση εύκολος.
Εγώ προσωπικά ξεκίνησα το δικό μου ORM πριν να δω τι παρέχουν τα προϋπάρχοντα και όχι γιατί βαριούμουνα να ψάξω αλλά γιατί ήθελα να ανακαλύψω τον τροχό από την αρχή. Ήθελα να μάθω από τα λάθη μου και ήθελα να απογοητευτώ με τη σύγκριση της πρώτης μου επίσημης έκδοσης με την τρέχουσα (εκείνης της εποχής) του NHibernate και πιστέψτε με, άξιζε κάθε *χαμένη* στιγμή.
Ο καθένας μας δίνει λύσεις κομμένες και ραμένες στα μέτρα του. Κάθε dev έχει το δικό του αγαπημένο ORM και αυτό δύσκολα αλλάζει. Βρείτε το δικό σας, φτιάξτε το δικό σας, κλέψτε κάποιου άλλου αλλά εν πάσει περιπτώσει χρησιμοποιήστε ένα ORM: Ο χρόνος που κερδίζει ένα ORM είναι ανεκτίμητος.
|
|
Σελίδα 1 από 2 (16 εγγραφές)
1
|
|
|