Sobes.tech
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.
    // Με ενεργοποιημένο lazy loading
    var post = context.Posts.Find(1);
    // Η πρόσβαση στα Comments ενεργοποιεί τη φόρτωση
    int commentCount = post.Comments.Count;
    
    Στο Entity Framework Core, είναι απαραίτητο να εγκατασταθεί το πακέτο Microsoft.EntityFrameworkCore.Proxies και να καλεστεί η μέθοδος .UseLazyLoadingProxies() στη διαμόρφωση του DbContext. Οι ιδιότητες πλοήγησης πρέπει να δηλώνονται ως virtual.

Η επιλογή της μεθόδου εξαρτάται από το σενάριο χρήσης και τη συμβιβαστική λύση μεταξύ απόδοσης (αριθμός ερωτημάτων) και όγκου φορτωμένων δεδομένων.