Middle
Πώς γίνεται η φόρτωση σχετικών οντοτήτων σε C#;
sobes.tech AI
Απάντηση από AI
Ο φόρτωση σχετικών οντοτήτων σε C# πραγματοποιείται συχνά με τη βοήθεια βιβλιοθηκών ORM, όπως το Entity Framework Core. Οι βασικές προσεγγίσεις:
- Επιτακτική (Eager) φόρτωση: Τα σχετιζόμενα δεδομένα φορτώνονται μαζί με την κύρια οντότητα σε ένα ερώτημα στη βάση δεδομένων.
// Χρήση της μεθόδου Include για επιτακτική φόρτωση var postsWithComments = context.Posts .Include(p => p.Comments) .ToList(); - Explicit (ρητή) φόρτωση: Τα σχετιζόμενα δεδομένα φορτώνονται ρητά μετά την απόκτηση της κύριας οντότητας.
Για ιδιότητες πλοήγησης μονής τιμής, χρησιμοποιείται// Απόκτηση της κύριας οντότητας var post = context.Posts.Find(1); // Ρητή φόρτωση των σχετικών σχολίων context.Entry(post) .Collection(p => p.Comments) .Load();.Reference()αντί για.Collection().// Ρητή φόρτωση του σχετικού συγγραφέα context.Entry(post) .Reference(p => p.Author) .Load(); - Lazy (τεμπέλης) φόρτωση: Τα σχετιζόμενα δεδομένα φορτώνονται αυτόματα κατά την πρώτη πρόσβαση σε αυτά. Απαιτεί ρύθμιση proxy ή dependency injection και αποτελεί την προεπιλεγμένη συμπεριφορά σε ορισμένα ORM.
Στο Entity Framework Core, είναι απαραίτητο να εγκατασταθεί το πακέτο// Με ενεργοποιημένο lazy loading var post = context.Posts.Find(1); // Η πρόσβαση στα Comments ενεργοποιεί τη φόρτωση int commentCount = post.Comments.Count;Microsoft.EntityFrameworkCore.Proxiesκαι να καλεστεί η μέθοδος.UseLazyLoadingProxies()στη διαμόρφωση τουDbContext. Οι ιδιότητες πλοήγησης πρέπει να δηλώνονται ωςvirtual.
Η επιλογή της μεθόδου εξαρτάται από το σενάριο χρήσης και τη συμβιβαστική λύση μεταξύ απόδοσης (αριθμός ερωτημάτων) και όγκου φορτωμένων δεδομένων.