Κορυφαίες 50 Ερωτήσεις και Απαντήσεις Συνέντευξης για το Πλαίσιο Οντοτήτων (2026)

Κορυφαίες ερωτήσεις και απαντήσεις συνέντευξης για το πλαίσιο οντοτήτων

Η προετοιμασία για μια συνέντευξη για το Entity Framework σημαίνει ότι πρέπει να προβλέπετε τις ερωτήσεις που αποκαλύπτουν πραγματικές ικανότητες. Οι ερωτήσεις συνέντευξης για το Entity Framework αποκαλύπτουν τον τρόπο σκέψης, την επίγνωση της απόδοσης και τον τρόπο με τον οποίο οι υποψήφιοι μετατρέπουν τις έννοιες σε πράξη.

Το Mastering Entity Framework ανοίγει θέσεις εργασίας σε όλο το φάσμα της σύγχρονης ανάπτυξης, από πλατφόρμες που βασίζονται σε δεδομένα έως υπηρεσίες cloud. Η πρακτική εμπειρία ενισχύει την αναλυτική ικανότητα, ενισχύει το τεχνικό βάθος και υποστηρίζει τις ομάδες. Οι υπεύθυνοι προσλήψεων εκτιμούν την πρακτική επίλυση προβλημάτων, τον επεκτάσιμο σχεδιασμό, την καθοδήγηση νέων φοιτητών και τις οδούς ανάπτυξης για τους νέους πτυχιούχους.
Διαβάστε περισσότερα ...

👉 Δωρεάν Λήψη PDF: Ερωτήσεις και Απαντήσεις Συνέντευξης για το Πλαίσιο Οντότητας

Κορυφαίες ερωτήσεις και απαντήσεις συνέντευξης για το πλαίσιο οντοτήτων

1) Τι είναι το Entity Framework και γιατί χρησιμοποιείται;

Το Πλαίσιο Οντοτήτων (EF) είναι MicrosoftΤο ORM (Αντικειμενο-Σχεσιακός Χάρτης)ping) πλαίσιο για .NET που απλοποιεί την αλληλεπίδραση με τη βάση δεδομένων, επιτρέποντας στους προγραμματιστές να εργάζονται με δεδομένα ως αντικείμενα .NET με ισχυρή πληκτρολόγηση αντί για ακατέργαστη SQLΑυτοί οι κοιλιακοίtracΗ λειτουργία επιτρέπει στους προγραμματιστές να εκτελούν λειτουργίες CRUD (Δημιουργία, Ανάγνωση, Ενημέρωση, Διαγραφή) χρησιμοποιώντας γνωστές δομές C#, και το πλαίσιο χειρίζεται τη μετάφραση αυτών των λειτουργιών σε βελτιστοποιημένα ερωτήματα SQL στο παρασκήνιο. Το EF μειώνει τον τυποποιημένο κώδικα πρόσβασης δεδομένων, βελτιώνει τη συντηρησιμότητα και βοηθά στην ενίσχυση της ασφάλειας τύπων κατά τη μεταγλώττιση.

Για παράδειγμα, αντί να γράφετε SQL, μπορείτε να χρησιμοποιήσετε:

var customers = context.Customers.Where(c => c.IsActive).ToList();

Το EF θα μεταφράσει αυτό το ερώτημα LINQ σε SQL, θα το εκτελέσει στη βάση δεδομένων και θα επιστρέψει τα αποτελέσματα ως αντικείμενα.


2) Εξηγήστε τη διαφορά μεταξύ Code Πρώτον, οι προσεγγίσεις με προτεραιότητα τη βάση δεδομένων και πρώτα το μοντέλο.

Το Entity Framework υποστηρίζει τρεις κύριες προσεγγίσεις ανάπτυξης:

Προσέγγιση Πότε να χρησιμοποιήσετε Τι συμβαίνει
Code Όνομα Νέα έργα ή σχεδιασμός βάσει τομέα Ορίζετε κλάσεις οντοτήτων. Το EF δημιουργεί το σχήμα βάσης δεδομένων από κώδικα.
Πρώτα η βάση δεδομένων Υπάρχουσα βάση δεδομένων Το EF δημιουργεί κλάσεις οντοτήτων και περιβάλλον από ένα υπάρχον σχήμα.
Μοντέλο Πρώτο Όταν προτιμάτε τον οπτικό σχεδιασμό Σχεδιάζετε το μοντέλο σε έναν οπτικό σχεδιαστή (Entity Designer) και το EF δημιουργεί τόσο τις κλάσεις όσο και τη βάση δεδομένων.

Κάθε προσέγγιση εξυπηρετεί διαφορετικά σενάρια: Code Όνομα είναι δημοφιλές στην ευέλικτη ανάπτυξη, Πρώτα η βάση δεδομένων προτιμάται με παλαιότερες βάσεις δεδομένων και Μοντέλο Πρώτο Κατάλληλο για περιπτώσεις όπου η οπτική μοντελοποίηση είναι σημαντική.


3) Τι είναι το DbContext και ποιος είναι ο ρόλος του στο EF;

DbContext είναι η κύρια τάξη που διαχειρίζεται το συνεδρία με τη βάση δεδομένων, tracks αλλάζει την οντότητα και συντονίζει την αποθήκευση δεδομένων πίσω στη βάση δεδομένων. Αντιπροσωπεύει μια γέφυρα μεταξύ της εφαρμογής C# και της βάσης δεδομένων. Μέσω DbContext, εσείς ορίζετε DbSet<TEntity> ιδιότητες, οι οποίες αντιπροσωπεύουν συλλογές οντοτήτων και αντιστοιχίζονται σε πίνακες στη βάση δεδομένων.

Παράδειγμα:

public class AppDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

Εδώ, Products λειτουργεί ως συλλογή για την εκτέλεση λειτουργιών CRUD. Το EF χρησιμοποιεί αυτό το πλαίσιο για να track καταστάσεις αντικειμένου και να δημιουργείτε εντολές SQL σε SaveChanges().


4) Τι είναι οι μετεγκαταστάσεις στο Entity Framework και πώς χρησιμοποιούνται;

Μεταναστεύσεις αποτελούν έναν μηχανισμό για να track και εφαρμόστε αλλαγές σχήματος στη βάση δεδομένων με την πάροδο του χρόνου. Καθώς το μοντέλο σας εξελίσσεται, οι μετεγκαταστάσεις βοηθούν στη διατήρηση του συγχρονισμού της βάσης δεδομένων χωρίς να απαιτείται χειροκίνητη τροποποίηση των σεναρίων SQL. Με Code Αρχικά, χρησιμοποιείτε εντολές όπως:

Add-Migration InitialCreate
Update-Database

Αυτό δημιουργεί κλάσεις μετεγκατάστασης που ορίζουν αλλαγές στο σχήμα και τις εφαρμόζουν στη βάση δεδομένων. Οι μετεγκαταστάσεις επιτρέπουν τον έλεγχο έκδοσης για το σχήμα της βάσης δεδομένων και διευκολύνουν τη συνεργατική ανάπτυξη.


5) Περιγράψτε την αργή φόρτωση, την πρόθυμη φόρτωση και την ρητή φόρτωση.

Η αποτελεσματική φόρτωση σχετικών δεδομένων είναι κρίσιμη στο EF. Ακολουθεί μια σύγκριση:

Στρατηγική Όταν εκτελείται Τυπική χρήση
Lazy Φόρτωση Σχετικά δεδομένα φορτώθηκαν κατά την πρώτη πρόσβαση Χρησιμοποιήστε το όταν τα σχετικά δεδομένα ενδέχεται να μην είναι πάντα απαραίτητα.
Eager Loading Σχετικά δεδομένα φορτώθηκαν εκ των προτέρων μέσω .Include() Χρησιμοποιήστε το όταν γνωρίζετε ότι χρειάζεστε σχετικά δεδομένα.
Ρητή φόρτωση Φόρτωση χειροκίνητα μετά το ερώτημα Δίνει τον ακριβή έλεγχο του πότε φορτώνονται τα σχετικά δεδομένα.

Για παράδειγμα:

var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager

Η αργή φόρτωση βοηθά στη μείωση των αρχικών ερωτημάτων, αλλά μπορεί να προκαλέσει N+1 προβλήματα ερωτήματος εάν δεν χρησιμοποιηθεί προσεκτικά.


6) Τι είναι η αλλαγή tracβασιλιάς στο Entity Framework;

Αλλαγή tracΟ βασιλιάς είναι ο εσωτερικός μηχανισμός του EF για να παρακολούθηση αλλαγών στην κατάσταση της οντότητας μετά την εκτέλεση ενός ερωτήματος. Όταν μια οντότητα ανακτάται από DbContext, είναι tracked. Οποιεσδήποτε τροποποιήσεις στις ιδιότητές του σημειώνονται και όταν SaveChanges() ονομάζεται, το EF δημιουργεί την κατάλληλη SQL INSERT, UPDATEΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. DELETE δηλώσεις. Για σενάρια μόνο για ανάγνωση όπου tracο βασιλιάς είναι περιττός, AsNoTracking() βελτιώνει την απόδοση απενεργοποιώντας την αλλαγή tracΒασιλιάς.


7) Πώς χειρίζεται το Entity Framework τις διενέξεις ταυτόχρονης λειτουργίας;

Ο έλεγχος ταυτόχρονης λειτουργίας διασφαλίζει ότι πολλοί χρήστες που ενημερώνουν τα ίδια δεδομένα δεν αντικαθιστούν ακούσια τις αλλαγές ο ένας του άλλου. Το EF χρησιμοποιεί αισιόδοξη συγχρονικότητα από προεπιλογή. Μια συνηθισμένη προσέγγιση περιλαμβάνει την προσθήκη ενός διακριτικό ταυτόχρονης χρήσης (σαν ένα RowVersion χρονική σήμανση). Το EF ελέγχει αυτό το διακριτικό κατά τη διάρκεια SaveChanges()και αν διαφέρει από την έκδοση της βάσης δεδομένων, ένα DbUpdateConcurrencyException δημιουργείται σφάλμα, υποδεικνύοντας μια διένεξη. Οι προγραμματιστές μπορούν στη συνέχεια να χειριστούν αυτήν την εξαίρεση για να προσπαθήσουν ξανά ή να επιλύσουν τις διαφορές δεδομένων.


8) Ποιες είναι οι ιδιότητες πλοήγησης στο EF;

Οι ιδιότητες πλοήγησης ορίζουν σχέσεις μεταξύ οντοτήτων. Επιτρέπουν στο EF να πλοήγηση σε συσχετίσεις (π.χ., ένα-προς-πολλά) χωρίς χειροκίνητες ενώσεις:

public class Order
{
    public int Id { get; set; }
    public Customer Customer { get; set; }
}

Εδώ, Customer είναι μια σύνδεση ιδιότητας πλοήγησης Order προς το σχετικό του CustomerΤο EF χρησιμοποιεί αυτές τις ιδιότητες για να δημιουργήσει σχέσεις και να ενωθεί αυτόματα κατά τη διάρκεια ερωτημάτων. Οι ιδιότητες πλοήγησης λειτουργούν παράλληλα. ξένα κλειδιά να μοντελοποιήσουν τις σχέσεις.


9) Ποιος είναι ο σκοπός του AsNo;Tracking();

AsNoTracking() απενεργοποιεί την αλλαγή tracβασιλιάς για ένα ερώτημα, το οποίο είναι ωφέλιμο για μόνο για ανάγνωση λειτουργίες όπου δεν σκοπεύετε να ενημερώσετε τις ανακτημένες οντότητες. Αυτό βελτιώνει την απόδοση μειώνοντας τη χρήση μνήμης και tracΕίναι ιδιαίτερα χρήσιμο κατά την ανάκτηση μεγάλων συνόλων δεδομένων χωρίς να τα τροποποιήσετε.


10) Τι είναι τα μεταγλωττισμένα ερωτήματα και πότε πρέπει να τα χρησιμοποιούμε;

Τα μεταγλωττισμένα ερωτήματα είναι μια τεχνική βελτιστοποίησης απόδοσης. Όταν εκτελείται ένα ερώτημα LINQ, το EF συνήθως το μεταφράζει σε SQL κάθε φορά. Με τα μεταγλωττισμένα ερωτήματα, αυτή η μετάφραση γίνεται μία φορά και ο τελικός εκπρόσωπος επαναχρησιμοποιείται — μειώνοντας την επιβάρυνση για συχνά εκτελούμενα ή σύνθετα ερωτήματα. Χρησιμοποιήστε τα σε μεγάλης κυκλοφορίας σενάρια όπου το ίδιο ερώτημα εκτελείται επανειλημμένα με διαφορετικές παραμέτρους.


11) Τι είναι οι καταστάσεις οντότητας στο Entity Framework και πώς επηρεάζουν την SaveChanges();

Πλαίσιο οντοτήτων tracks κάθε οντότητας κατάσταση για να προσδιορίσετε ποια λειτουργία βάσης δεδομένων θα εκτελεστεί κατά τη διάρκεια SaveChanges()Οι κύριες καταστάσεις οντότητας είναι:

Κατάσταση Περιγραφή OperaΕνεργοποιήθηκε
Προστέθηκε Νέα οντότητα προς εισαγωγή INSERT
Τροποποιημένο Η υπάρχουσα οντότητα ενημερώθηκε UPDATE
Διαγράφηκε Οντότητα που έχει επισημανθεί για κατάργηση DELETE
Αμετάβλητος Δεν εντοπίστηκαν αλλαγές Ν/Α
Απομονωμένο Δεν tracανάλογα με τα συμφραζόμενα Ν/Α

Όταν καλείτε SaveChanges(), το EF επιθεωρεί τις καταστάσεις της οντότητας και εκτελεί τις αντίστοιχες εντολές SQL. Για παράδειγμα, μια νέα οντότητα που προστίθεται σε ένα DbSet θα επισημανθεί Προστέθηκε, με αποτέλεσμα ένα INSERT ερώτηση.

Παράδειγμα:

context.Entry(product).State = EntityState.Modified;
context.SaveChanges();

Αυτό ενημερώνει ρητά την εγγραφή της βάσης δεδομένων για την οντότητα.

Κατανόηση των καταστάσεων εξασφαλίζει καλύτερο έλεγχο του συγχρονισμού και της απόδοσης δεδομένων.


12) Ποια είναι τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης του Entity Framework;

Το Entity Framework παρέχει σημαντικά οφέλη, αλλά και ορισμένα αντισταθμίσματα, ανάλογα με την περίπτωση χρήσης σας.

Πλεονεκτήματα Μειονεκτήματα
Απλοποιεί την πρόσβαση σε δεδομένα μέσω LINQ και μοντέλων αντικειμένων. Επιβάρυνση απόδοσης σε σύγκριση με το ακατέργαστο ADO.NET.
Μειώνει τον τυποποιημένο κώδικα SQL. Τα σύνθετα ερωτήματα ενδέχεται να δημιουργήσουν αναποτελεσματική SQL.
Υποστηρίζει πολλαπλούς παρόχους βάσεων δεδομένων. Δυσκολότερος ο εντοπισμός σφαλμάτων σε εντολές SQL που δημιουργούνται.
Έντονα τυπογραφημένο, βελτιώνοντας την ασφάλεια κατά τη μεταγλώττιση. Πιθανές συγκρούσεις μετεγκατάστασης σε μεγάλες ομάδες.
Επιτρέπει την ταχεία δημιουργία πρωτοτύπωνping μαζί σου, Code Πρώτον. Less έλεγχος των λεπτομερώς προσαρμοσμένων ερωτημάτων.

Για συστήματα μεγάλης κλίμακας που απαιτούν μέγιστη απόδοση, οι προγραμματιστές ενδέχεται να συνδυάζουν ακατέργαστη SQL με EF για βελτιστοποίηση.


13) Πώς χειρίζεται το Entity Framework τις σχέσεις (ένα-προς-ένα, ένα-προς-πολλά, πολλά-προς-πολλά);

Το Entity Framework διαχειρίζεται τις σχέσεις μέσω ιδιότητες πλοήγησης και ξένες βασικές ενώσεις.

Τα είδη των σχέσεων είναι:

Τύπος σχέσης Περιγραφή Παράδειγμα
Ενα προς ένα Κάθε παρουσία οντότητας έχει μία σχετική οντότητα. UserUserProfile
Ένα-προς-Πολλά Μία οντότητα σχετίζεται με πολλές άλλες. CustomerOrders
Πολλά-προς-Πολλά Πολλαπλές οντότητες σχετίζονται μεταξύ τους. StudentCourse

Παράδειγμα α Ένα-προς-Πολλά σχέση:

public class Customer
{
    public int CustomerId { get; set; }
    public ICollection<Order> Orders { get; set; }
}

Το EF δημιουργεί αυτόματα ξένα κλειδιά και λαβές κανόνες διαγραφής σειρών ανάλογα με τη διαμόρφωση.

Μπορείτε επίσης να χρησιμοποιήσετε Fluent API για πιο σαφή χάρτη σχέσεωνping.


14) Ποια είναι η διαφορά μεταξύ του LINQ σε Οντότητες και του LINQ σε SQL;

Χαρακτηριστικό LINQ σε Οντότητες LINQ σε SQL
Υποστηριζόμενες βάσεις δεδομένων Πολλαπλά (SQL Server, Oracle, MySQLΚ.λπ.). Μόνο SQL Server
Υποκείμενο Πλαίσιο Πλαίσιο οντοτήτων ADO.NET
Μοντέλο Εννοιολογικό Μοντέλο Οντότητας Μόνο πίνακες βάσης δεδομένων
ΧΑΡΤΗΣ Σύνθετος χάρτηςping (κληρονομικότητα, ενώσεις) Άμεσος χάρτης τραπεζιώνping
Μελλοντική Υποστήριξη Υποστηρίζεται ενεργά αποδοκιμαστεί

LINQ σε Οντότητες είναι μέρος του Entity Framework και πιο ευέλικτο, ενώ LINQ σε SQL περιορίζεται στον SQL Server και σε απλούστερες περιπτώσεις χρήσης.

Ως εκ τούτου, το LINQ to Entities συνιστάται για ανάπτυξη σε επίπεδο επιχείρησης.


15) Ποια είναι η διαφορά μεταξύ ObjectContext και DbContext;

Χαρακτηριστικό Πλαίσιο αντικειμένου DbContext
Πλαίσιο Παλαιότερες εκδόσεις EF Απλοποιημένο API στο EF 4.1+
Περίπλοκο Πιο λεπτομερές Ελαφρύ και εύκολο
💪 Βελτίωση της απόδοσης στην άσκηση Ελαφρώς πιο γρήγορο αλλά πιο δύσκολο στη χρήση Απλοποιημένο με ελάχιστη επιβάρυνση
Αλλαγή Tracking Απαιτείται χειροκίνητη διαμόρφωση Αυτόματο tracβασιλιάς
Προτιμώμενη χρήση Συστήματα κληρονομιάς Σύγχρονα έργα EF / EF Core

DbContext εσωτερικά περιτυλίγματα ObjectContext αλλά παρέχει ένα πιο καθαρό και πιο εύχρηστο API. Οι περισσότερες πρόσφατες εφαρμογές .NET θα πρέπει να χρησιμοποιούν DbContext.


16) Εξηγήστε τον κύκλο ζωής μιας οντότητας στο Entity Framework.

Ο κύκλος ζωής μιας οντότητας περιγράφει την μεταβάσεις κατάστασης από τη δημιουργία στην επιμονή:

  1. Δημιουργία – Η οντότητα δημιουργείται στη μνήμη (κατάσταση: Απομονωμένο).
  2. Συνημμένο – Προστέθηκε στο πλαίσιο μέσω DbSet.Add() (κατάσταση: Προστέθηκε).
  3. Τροποποίηση – Οι αλλαγές ανιχνεύονται αυτόματα (κατάσταση: Τροποποιημένο).
  4. Επιμονή - SaveChanges() καλείται → εκτελούνται εντολές SQL.
  5. διαγραφή – Οντότητα που έχει επισημανθεί ως Διαγράφηκε και αφαιρέθηκε από τη βάση δεδομένων.

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


17) Ποια είναι η χρήση του Fluent API στο Entity Framework;

The Fluent API παρέχει έναν προγραμματικό τρόπο για τη διαμόρφωση των σχέσεων μοντέλων, των περιορισμών και των χαρτών.pings, που χρησιμοποιείται συχνά στο OnModelCreating() η μέθοδος σας DbContext.

Παρέχει λεπτομερή έλεγχο στις διαμορφώσεις που σχολιασμοί δεδομένων δεν μπορεί να εκφράσει.

Παράδειγμα:

modelBuilder.Entity<Customer>()
    .HasMany(c => c.Orders)
    .WithOne(o => o.Customer)
    .HasForeignKey(o => o.CustomerId);

Το Fluent API είναι ιδιαίτερα ισχυρό για τη διαμόρφωση σύνθετα κλειδιά, σχέσεις πολλά-προς-πολλάκαι κανόνες καταρράκτη.


18) Τι είναι οι σχολιασμοί δεδομένων στο Entity Framework;

Οι σχολιασμοί δεδομένων είναι γνωρίσματα εφαρμόζονται απευθείας σε κλάσεις ή ιδιότητες μοντέλων για να ορίσουν τη συμπεριφορά του σχήματος. Είναι απλούστερα από το Fluent API αλλά λιγότερο ευέλικτα.

Παράδειγμα:

public class Product
{
    [Key]
    public int ProductId { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }
}

Οι σχολιασμοί ορίζουν κλειδιά, μήκη συμβολοσειρών, απαιτούμενα πεδία και σχέσεις. Για προχωρημένες περιπτώσεις, οι προγραμματιστές συνήθως συνδυάζουν Σχολιασμοί δεδομένων και Fluent API.


19) Ποια είναι η διαφορά μεταξύ tracked και untracοντότητες που έχουν κωδικοποιηθεί στο EF Core;

Χαρακτηριστικά Περιγραφή Χρήση θήκης
TracΟντότητες ked Παρακολουθείται από DbContext για αλλαγές. Προεπιλεγμένη συμπεριφορά για ενημερώσεις.
UntracΟντότητες ked Δεν παρακολουθείται· ανακτήθηκε με .AsNoTracking(). Ιδανικό για λειτουργίες μόνο για ανάγνωση.

TracΟι οντότητες που έχουν κωδικοποιηθεί καταναλώνουν περισσότερη μνήμη, αλλά επιτρέπουν στο EF να ανιχνεύει αυτόματα τις αλλαγές.

Untracοι οντότητες που έχουν κλειδωθεί βελτιώνονται απόδοση σε σενάρια υψηλής ανάγνωσης, χαμηλής ενημέρωσης.


20) Πώς μπορείτε να εκτελέσετε ακατέργαστα ερωτήματα SQL στο Entity Framework;

Το Entity Framework επιτρέπει την εκτέλεση ακατέργαστου SQL για προσαρμοσμένα ή κρίσιμα για την απόδοση ερωτήματα.

var result = context.Products
    .FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
    .ToList();

Για εντολές που δεν αφορούν ερωτήματα:

context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1");

Χρησιμοποιήστε αυτήν τη λειτουργία προσεκτικά για να αποφύγετε SQL injection και να διατηρείται η ευελιξία ανεξάρτητα από τη βάση δεδομένων.


21) Ποια είναι η διαφορά μεταξύ του Entity Framework και του Entity Framework Core;

Το Entity Framework (EF) και το Entity Framework Core (EF Core) διαφέρουν ως προς την αρχιτεκτονική, τις δυνατότητες και την υποστήριξη μεταξύ πλατφορμών.

Χαρακτηριστικό Πλαίσιο Οντοτήτων 6 (EF6) Πυρήνας πλαισίου οντοτήτων
Πλατφόρμα Μόνο για το .NET Framework Διαπλατφορμική (.NET 5/6/7)
Archiδομή Με βάση το ObjectContext Ελαφρύ και αρθρωτό
💪 Βελτίωση της απόδοσης στην άσκηση Πιο αργό σε ορισμένα ερωτήματα Βελτιστοποιημένη δημιουργία ερωτημάτων
Υποστήριξη LINQ Ώριμο αλλά περιορισμένο Βελτιωμένη μετάφραση και ασύγχρονη μετάφραση
Πάροχοι βάσεων δεδομένων Διακομιστής SQL, Oracle Πολλαπλά (MySQL, PostgreSQL, SQLiteΚ.λπ.).
Χαρακτηριστικά Ώριμο (π.χ., αργή φόρτωση) Σύγχρονο (π.χ., ιδιότητες σκιάς, καθολικά φίλτρα)

Το EF Core είναι το σύγχρονο, ενεργά αναπτυγμένο έκδοση και η συνιστώμενη επιλογή για νέα έργα .NET λόγω της ευελιξίας και της απόδοσής της.


22) Πώς λειτουργούν οι συναλλαγές στο Entity Framework;

Οι συναλλαγές στο Entity Framework διασφαλίζουν ακεραιότητα δεδομένων όταν πολλαπλές λειτουργίες πρέπει να είναι επιτυχείς ή να αποτύχουν ταυτόχρονα. Από προεπιλογή, η αναδίπλωση EF SaveChanges() μέσα σε μια συναλλαγή. Για χειροκίνητο έλεγχο:

using (var transaction = context.Database.BeginTransaction())
{
    try
    {
        context.Customers.Add(new Customer());
        context.SaveChanges();

        context.Orders.Add(new Order());
        context.SaveChanges();

        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
    }
}

Αυτό διασφαλίζει την ατομικότητα — εάν κάποια εντολή αποτύχει, όλες οι αλλαγές ακυρώνονται.

Το EF ενσωματώνεται επίσης με Σύστημα.Συναλλαγές για υποστήριξη κατανεμημένων συναλλαγών.


23) Εξηγήστε τις στρατηγικές κληρονομικότητας TPH, TPT και TPC στο Entity Framework.

Το Entity Framework υποστηρίζει τρεις κύριους χάρτες κληρονομικότηταςping Στρατηγικές για τη μοντελοποίηση ιεραρχιών κλάσεων.

Στρατηγική Περιγραφή Παράδειγμα Πλεονεκτήματα Μειονεκτήματα
TPH (Πίνακας ανά ιεραρχία) Όλες οι κλάσεις μοιράζονται έναν πίνακα· μια στήλη διακριτικού προσδιορίζει τον τύπο. Συνηθισμένο στον πυρήνα EF. Απλά, γρήγορα ερωτήματα. Το τραπέζι μπορεί να γίνει μεγάλο και αραιό.
TPT (Πίνακας ανά τύπο) Κάθε υποκλάση έχει τον δικό της πίνακα. Κάθε παράγωγη κλάση απεικονίζεται ξεχωριστά. Κανονικοποιημένο σχήμα. Αργότερες ενώσεις σε μεγάλες ιεραρχίες.
TPC (Πίνακας ανά κατηγορία σκυροδέματος) Κάθε κλάση έχει τον δικό της πίνακα με διπλότυπες στήλες. Κάθε οντότητα χαρτογραφείται ξεχωριστά. Υψηλή απόδοση ανάγνωσης. Πλεονασμός δεδομένων.

Οι περισσότεροι προγραμματιστές προτιμούν TPH για την απλότητά του, εκτός εάν οι ανάγκες ομαλοποίησης ή απόδοσης υπαγορεύουν διαφορετικά.


24) Πώς χειρίζεστε τη ρύθμιση της απόδοσης στο Entity Framework;

Για να βελτιστοποιήσετε την απόδοση του Entity Framework:

  1. Χρήση AsNoTracking() για ερωτήματα μόνο για ανάγνωση.
  2. Πρόθυμο φορτίο μόνο απαραίτητες σχετικές οντότητες με .Include().
  3. Αποφύγετε τα ερωτήματα N+1 χρησιμοποιώντας προβολές ή Select().
  4. Χρήση μεταγλωττισμένων ερωτημάτων για συχνές λειτουργίες.
  5. Μαζική πολλαπλή εισαγωγή/ενημερώσεις μαζί σου, AddRange() και SaveChanges().
  6. Απενεργοποίηση ΑυτόματηςΑνίχνευσηςΑλλαγών για μαζικές εργασίες: context.Configuration.AutoDetectChangesEnabled = false;
  7. Χρήση προσωρινής αποθήκευσης και σελιδοποίησης για μεγάλα σύνολα δεδομένων.

Μια καλά ρυθμισμένη υλοποίηση EF μπορεί να προσεγγίσει την απόδοση του ADO.NET διατηρώντας παράλληλα την παραγωγικότητα των προγραμματιστών.


25) Τι είναι μια ιδιότητα shadow στο Entity Framework Core;

A ιδιότητα σκιάς υπάρχει στο μοντέλο EF αλλά όχι στην κλάση οντοτήτων. Διατηρείται από το EF στην αλλαγή tracker και αποθηκεύεται στη βάση δεδομένων.

Παράδειγμα:

modelBuilder.Entity<Order>()
    .Property<DateTime>("LastUpdated");

Αυτό επιτρέπει στο EF να αποθηκεύει επιπλέον μεταδεδομένα (π.χ., χρονικές σημάνσεις, πληροφορίες ελέγχου) χωρίς να τροποποιεί την κλάση οντότητας.

Μπορείτε να αποκτήσετε πρόσβαση στις ιδιότητες της σκιάς μέσω:

var value = context.Entry(order).Property("LastUpdated").CurrentValue;

Οι ιδιότητες σκίασης είναι ιδανικές για σενάρια καταγραφής ή ελέγχου.


26) Τι είναι οι μετατροπείς αξίας στο EF Core;

Οι μετατροπείς τιμών στο EF Core επιτρέπουν τον μετασχηματισμό τιμών ιδιοτήτων κατά την ανάγνωση από ή την εγγραφή στη βάση δεδομένων.

Για παράδειγμα, για να αποθηκεύσετε μια απαρίθμηση ως συμβολοσειρά:

modelBuilder.Entity<Employee>()
    .Property(e => e.Status)
    .HasConversion(
        v => v.ToString(),
        v => (EmployeeStatus)Enum.Parse(typeof(EmployeeStatus), v));

Αυτό ενισχύει την ευελιξία για προσαρμοσμένους τύπους δεδομένων, όπως enum, boolΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. DateTimeOffset.

Οι μετατροπείς αξίας χρησιμοποιούνται επίσης για κρυπτογράφηση, συμπίεση ή απόκρυψη ευαίσθητων δεδομένων.


27) Τι είναι τα καθολικά φίλτρα ερωτημάτων και πώς λειτουργούν;

Τα καθολικά φίλτρα ερωτημάτων επιτρέπουν την αυτόματη εφαρμογή συνθηκών σε όλα τα ερωτήματα για μια οντότητα.

Αυτό είναι ιδιαίτερα χρήσιμο για μαλακές διαγραφές or πολλαπλή μίσθωση.

Παράδειγμα:

modelBuilder.Entity<Employee>()
    .HasQueryFilter(e => !e.IsDeleted);

Κάθε ερώτημα που εκτελείται έναντι Employee εξαιρεί αυτόματα τις εγγραφές που διαγράφηκαν μέσω λογισμικού, εκτός εάν έχει παρακαμφθεί ρητά.

Τα καθολικά φίλτρα βελτιώνουν τη συντηρησιμότητα και την ασφάλεια των δεδομένων.


28) Πώς μπορείτε να δοκιμάσετε τον κώδικα του Entity Framework χρησιμοποιώντας δοκιμές μονάδας;

Για να ελέγξετε τη λογική EF σε μονάδα χωρίς να φτάσετε σε μια πραγματική βάση δεδομένων, χρησιμοποιήστε βάσεις δεδομένων στη μνήμη or διακωμώδηση:

  • Επιλογή 1: Πάροχος InMemory
    var options = new DbContextOptionsBuilder<AppDbContext>()
        .UseInMemoryDatabase("TestDb")
        .Options;
    
  • Επιλογή 2: Προσομοίωση DbContext
    Κοροϊδεύω DbSet χρησιμοποιώντας βιβλιοθήκες όπως MOQ για μεμονωμένες δοκιμές.

Οι δοκιμές μονάδας θα πρέπει να επικυρώνουν:

  • Ορθότητα ερωτήματος (μέσω LINQ)
  • Συνέπεια δεδομένων μετά SaveChanges()
  • Λογική αποθετηρίου

Η δοκιμή με το EF Core InMemory διασφαλίζει την ταχύτητα και αποφεύγει τις εξαρτήσεις από τον SQL Server.


29) Εξηγήστε τα πρότυπα Αποθετηρίου και Μονάδας Εργασίας στο EF.

Αυτά τα δύο αρχιτεκτονικά μοτίβα βοηθούν ABStracπρόσβαση σε δεδομένα και διατηρήστε τη συναλλακτική συνέπεια.

πρότυπο Σκοπός Παράδειγμα Εφαρμογής
ΑΠΟΘΕΤΗΡΙΟ Ενσωματώνει τις λειτουργίες CRUD για κάθε οντότητα. IRepository<T> διεπαφή με Add(), GetAll()Κ.λπ.
Μονάδα Εργασίας Συντονίζει πολλαπλά αποθετήρια μέσα σε μια συναλλαγή. SaveChanges() λειτουργεί ως όριο υποβολής.

Παράδειγμα:

public class UnitOfWork : IUnitOfWork
{
    private readonly AppDbContext _context;
    public void Commit() => _context.SaveChanges();
}

Αυτά τα μοτίβα βελτιώνονται δοκιμασιμότητα, επαναχρησιμοποίηση κώδικακαι διαχωρισμός των ανησυχιών σε εφαρμογές μεγάλων επιχειρήσεων.


30) Ποια είναι η διαφορά μεταξύ της πρόθυμης φόρτωσης και της φόρτωσης προβολής;

Άποψη Eager Loading Φόρτωση προβολής
Σκοπός Φορτώνει σχετικά δεδομένα εκ των προτέρων Φορτώνει μόνο συγκεκριμένα πεδία ή ιδιότητες
Μέθοδος .Include() .Select()
Παράδειγμα context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name })
💪 Βελτίωση της απόδοσης στην άσκηση Ανακτά πλήρη αντικείμενα Ανακτά ελάχιστα δεδομένα
Χρήση θήκης Όταν απαιτούνται σχετικές οντότητες για επεξεργασία Όταν χρειάζεστε συγκεκριμένα, ελαφριά δεδομένα

Η φόρτωση προβολής είναι μια βελτιστοποίηση απόδοσης που μειώνει την επιβάρυνση μνήμης επιλέγοντας μόνο τις απαραίτητες στήλες.


31) Τι είναι οι αναχαιτιστές στο Entity Framework Core;

Οι αναχαιτιστές στο EF Core επιτρέπουν στους προγραμματιστές να αναχαιτίζουν και να τροποποιούν λειτουργίες βάσης δεδομένων, όπως εκτέλεση ερωτήματος, δημιουργία εντολών και άνοιγμα σύνδεσης.

Λειτουργούν ως στοιχεία middleware μεταξύ του EF και του παρόχου της βάσης δεδομένων.

Παράδειγμα: Καταγραφή όλων των εκτελεσμένων εντολών SQL.

public class CommandInterceptor : DbCommandInterceptor
{
    public override void ReaderExecuting(
        DbCommand command,
        CommandEventData eventData,
        InterceptionResult<DbDataReader> result)
    {
        Console.WriteLine($"Executing SQL: {command.CommandText}");
        base.ReaderExecuting(command, eventData, result);
    }
}

Το καταχωρείτε στο DbContextOptionsBuilder:

optionsBuilder.AddInterceptors(new CommandInterceptor());

οφέλη:

  • Βελτιωμένη καταγραφή
  • Ασφάλεια (επικύρωση ερωτήματος)
  • Έλεγχος και απόδοση tracβασιλιάς

32) Πώς χειρίζεται το EF Core ασύγχρονες λειτουργίες;

Το Entity Framework Core υποστηρίζει πλήρως ασύγχρονος προγραμματισμός μέσω μεθόδων όπως SaveChangesAsync(), ToListAsync()και FirstOrDefaultAsync().

Η ασύγχρονη εκτέλεση βοηθάει βελτίωση της επεκτασιμότητας σε εφαρμογές ιστού, απελευθερώνοντας νήματα ενώ αναμένουν λειτουργίες βάσης δεδομένων που συνδέονται με I/O.

Παράδειγμα:

var customers = await context.Customers
    .Where(c => c.IsActive)
    .ToListAsync();

Οι ασύγχρονες λειτουργίες είναι ιδιαίτερα αποτελεσματικές σε υψηλής απόδοσης Βασικά API ASP.NET και μικροϋπηρεσίες, μειώνοντας τον αποκλεισμό κλήσεων και βελτιώνοντας τους χρόνους απόκρισης.


33) Τι είναι η ανθεκτικότητα σύνδεσης στο Entity Framework Core;

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

Μπορεί να διαμορφωθεί ως εξής:

optionsBuilder.UseSqlServer(
    connectionString,
    options => options.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null)
);

Εδώ, το EF θα επαναλάβει τις αποτυχημένες λειτουργίες έως και 5 φορές με καθυστερήσεις.

Αυτό είναι ιδιαίτερα χρήσιμο σε περιβάλλοντα που φιλοξενούνται στο cloud όπως το λευκό και το γκρι είναι μια ασφαλής επιλογή. Ταιριάζουν σχεδόν με οποιοδήποτε χρώμα ξύλου και δημιουργούν μια ισορροπημένη εμφάνιση. Για μια μοντέρνα αίσθηση, ίσως προτιμήσετε Azure SQL όπου τα παροδικά σφάλματα είναι συνηθισμένα.


34) Ποιοι είναι οι τύποι οντοτήτων που ανήκουν στο EF Core;

Οι οντότητες που ανήκουν σε εσάς επιτρέπουν τη μοντελοποίηση αντικείμενα αξίας που εξαρτώνται αποκλειστικά από τον κύκλο ζωής μιας άλλης οντότητας.

Μοιράζονται τον ίδιο πίνακα με τον κάτοχό τους και δεν μπορούν να υπάρχουν ανεξάρτητα.

Παράδειγμα:

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}
public class Customer
{
    public int Id { get; set; }
    public Address Address { get; set; }
}

Διαμόρφωση:

modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);

Περίπτωση χρήσης:

Μοντελοποίηση εννοιών όπως Διεύθυνση, ΧρήματαΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. Μετρήσεις που δεν έχουν δική τους ταυτότητα.


35) Πώς μπορείτε να εφαρμόσετε soft deletes στο Entity Framework Core;

Οι μαλακές διαγραφές επισημαίνουν τις εγγραφές ως διαγραμμένες αντί να τις αφαιρούν φυσικά.

Υλοποιούνται χρησιμοποιώντας ένα δυαδική σημαία και καθολικά φίλτρα ερωτημάτων.

modelBuilder.Entity<Employee>()
    .HasQueryFilter(e => !e.IsDeleted);

Στη λειτουργία διαγραφής:

employee.IsDeleted = true;
context.Update(employee);
context.SaveChanges();

Πλεονεκτήματα:

  • Διατήρηση ιστορικών δεδομένων
  • Ευκολότερη ανάρρωση

Μειονεκτήματα:

  • Μεγαλύτεροι πίνακες βάσης δεδομένων
  • Απαιτείται προσεκτική λογική φιλτραρίσματος

36) Τι είναι το μεταγλωττισμένο μοντέλο στο EF Core και γιατί χρησιμοποιείται;

Στο EF Core 6+, μεταγλωττισμένα μοντέλα επιτρέπουν την προμεταγλώττιση των μεταδεδομένων του μοντέλου EF σε μια συναρμολόγηση .NET, μειώνοντας τον χρόνο εκκίνησης και την επιβάρυνση χρόνου εκτέλεσης.

Βήματα:

  1. Εκτελέστε την εντολή: dotnet ef dbcontext optimize
  2. Το EF δημιουργεί ένα προμεταγλωττισμένο αρχείο μοντέλου που η εφαρμογή φορτώνει πιο γρήγορα κατά τον χρόνο εκτέλεσης.

Όφελος: Μειώνει την καθυστέρηση αρχικοποίησης κατά 30–40%, ειδικά σε μεγάλες εφαρμογές με πολλές οντότητες.

Περίπτωση χρήσης: Μικροϋπηρεσίες υψηλής απόδοσης και περιβάλλοντα χωρίς διακομιστή.


37) Πώς μπορείτε να εφαρμόσετε την προσωρινή αποθήκευση στο Entity Framework;

Η προσωρινή αποθήκευση βοηθά στη μείωση των επαναλαμβανόμενων ερωτημάτων βάσης δεδομένων. Υπάρχουν δύο κύρια επίπεδα:

Χαρακτηριστικά Περιγραφή Παράδειγμα
Κρυφή μνήμη πρώτου επιπέδου Ενσωματωμένο, ανά DbContext παράδειγμα Αυτόματη διαχείριση
Κρυφή μνήμη δεύτερου επιπέδου Εξωτερική προσωρινή μνήμη που μοιράζεται σε όλα τα περιβάλλοντα Χρησιμοποιήστε βιβλιοθήκες όπως EFCoreSecondLevelCacheInterceptor

Παράδειγμα για προσωρινή αποθήκευση δευτέρου επιπέδου:

services.AddEFSecondLevelCache(options =>
{
    options.UseMemoryCacheProvider().DisableLogging(false);
});

Αυτό βελτιώνει σημαντικά την απόδοση σε εφαρμογές που απαιτούν πολύ χρόνο ανάγνωσης αποφεύγοντας περιττές επισκέψεις στη βάση δεδομένων.


38) Πώς διαχειρίζεται το EF Core τα διακριτικά ταυτόχρονης λειτουργίας και τις χρονικές σημάνσεις;

Τα διακριτικά ταυτόχρονης χρήσης αποτρέπουν αντικρουόμενες ενημερώσεις σε περιβάλλοντα πολλαπλών χρηστών.

Μπορείτε να επισημάνετε μια ιδιότητα ως διακριτικό ταυτόχρονης χρήσης χρησιμοποιώντας το [ConcurrencyCheck] or [Timestamp] αποδίδουν.

Παράδειγμα:

public class Product
{
    public int Id { get; set; }

    [Timestamp]
    public byte[] RowVersion { get; set; }
}

Όταν πραγματοποιείται μια ενημέρωση, το EF περιλαμβάνει αυτήν τη στήλη στο WHERE ρήτρα.

Εάν η τιμή δεν ταιριάζει, ένα DbUpdateConcurrencyException ρίχνεται — διασφαλίζοντας αισιόδοξος έλεγχος ταυτόχρονης λειτουργίας.


39) Πώς εφαρμόζετε τον έλεγχο (δημιουργία, τροποποίηση, διαγραφή) tracβασιλιάς) στον πυρήνα EF;

Ελεγκτικά tracμεταδεδομένα ks όπως ποιος δημιούργησε, τροποποίησε ή διέγραψε Εγγραφές.

Μπορείτε να παρακάμψετε SaveChanges():

public override int SaveChanges()
{
    var entries = ChangeTracker.Entries()
        .Where(e => e.Entity is IAuditable && 
                   (e.State == EntityState.Added || e.State == EntityState.Modified));

    foreach (var entry in entries)
    {
        var auditable = (IAuditable)entry.Entity;
        auditable.LastModified = DateTime.UtcNow;
    }

    return base.SaveChanges();
}

Διασύνδεση:

public interface IAuditable
{
    DateTime Created { get; set; }
    DateTime LastModified { get; set; }
}

Αυτή η μέθοδος συγκεντρώνει τη λογική ελέγχου, διασφαλίζοντας συνεπής διακυβέρνηση δεδομένων.


40) Ποιες είναι οι βέλτιστες πρακτικές για τη χρήση του Entity Framework σε εταιρικές εφαρμογές;

Κατηγορία Καλύτερη Πρακτική Όφελος
💪 Βελτίωση της απόδοσης στην άσκηση Χρήση AsNoTracking() και προβολές για ερωτήματα μόνο για ανάγνωση. Μειώνει τα γενικά έξοδα.
Υπηρεσίες Υλοποίηση μοτίβων Αποθετηρίου και Μονάδας Εργασίας. Βελτιώνει τη συντηρησιμότητα.
Ασφάλεια Χρησιμοποιήστε παραμετροποιημένα ερωτήματα για να αποφύγετε την έγχυση SQL. Προστασία δεδομένων.
Απεριόριστες δυνατότητες Χρησιμοποιήστε μεθόδους ομαδοποίησης συνδέσεων και ασύγχρονης λειτουργίας. Αντέχει σε υψηλό φορτίο.
Μεταναστεύσεις Χρησιμοποιήστε αυτοματοποιημένες μετεγκαταστάσεις με έλεγχο έκδοσης. Απλοποιεί τη διαχείριση σχημάτων.
διαμόρφωση Εξωτερικοποιήστε συμβολοσειρές σύνδεσης και μυστικά. Καλύτερη απομόνωση του περιβάλλοντος.
Δοκιμές Χρησιμοποιήστε την υπηρεσία παροχής InMemory για δοκιμές μονάδας. Ταχύτερες δοκιμές.
Ξύλευση Ενεργοποιήστε την καταγραφή EF για πληροφορίες απόδοσης. Ευκολότερη αποσφαλμάτωση.

Αυτές οι πρακτικές διασφαλίζουν στιβαρό, επεκτάσιμο και συντηρήσιμο εφαρμογές που βασίζονται στο Entity Framework.


41) Πώς μπορείτε να βελτιστοποιήσετε τα ερωτήματα LINQ για καλύτερη μετάφραση SQL στο Entity Framework;

Το Entity Framework μετατρέπει αυτόματα τα ερωτήματα LINQ σε SQL, αλλά τα αναποτελεσματικά μοτίβα μπορούν να παράγουν αργό ή περιττό SQL. Η βελτιστοποίηση του LINQ διασφαλίζει ότι το ORM δημιουργεί αποδοτικά ερωτήματα βάσης δεδομένων.

Τεχνικές βελτιστοποίησης:

Χρησιμοποιήστε Προβολές:

  1. Επιλέξτε μόνο τις απαιτούμενες στήλες αντί για ολόκληρες οντότητες.
  2. var customers = context.Customers
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
  3. Αποφύγετε την αξιολόγηση από την πλευρά του πελάτη:
    Να διασφαλίζετε πάντα ότι γίνεται φιλτράρισμα σε SQL, όχι στη μνήμη. Το EF Core προειδοποιεί όταν η αξιολόγηση γίνεται από την πλευρά του πελάτη.
  4. Χρήση AsNoTracking() για δεδομένα μόνο για ανάγνωση.
  5. var orders = context.Orders.AsNoTracking().ToList();
  6. Αξιοποίηση μεταγλωττισμένων ερωτημάτων για επαναλαμβανόμενες λειτουργίες LINQ.
  7. Αποφύγετε τα περιττά .Include() κλήσεις — συμπεριλάβετε σχετικά δεδομένα μόνο όταν χρειάζεται.

Παράδειγμα:

Ανεπαρκής:

context.Customers.ToList().Where(c => c.IsActive);

Αποτελεσματικός:

context.Customers.Where(c => c.IsActive).ToList();

42) Ποιοι είναι οι διαφορετικοί τρόποι για την εισαγωγή αρχικών δεδομένων στο EF Core;

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

Προσέγγιση 1: Χρήση του ModelBuilder

modelBuilder.Entity<Role>().HasData(
    new Role { Id = 1, Name = "Admin" },
    new Role { Id = 2, Name = "User" }
);

Αυτό εισάγει δεδομένα αυτόματα κατά τη διάρκεια Update-Database.

Προσέγγιση 2: Μέθοδος Προσαρμοσμένης Σποράς

Εκτελέστε τον κώδικα χειροκίνητα κατά την εκκίνηση:

context.Database.Migrate();
if (!context.Users.Any())
{
    context.Users.Add(new User { Name = "Admin" });
    context.SaveChanges();
}

Προσέγγιση 3: Σενάρια SQL

Χρήση ακατέργαστου SQL στις μετεγκαταστάσεις:

migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");

Σύσταση:
Χρήση HasData() για στατικά δεδομένα αναφοράς και προγραμματιστική σπορά για δυναμικά δεδομένα εκκίνησης.


43) Πώς διαχειρίζεται εσωτερικά η EF Core τους παρόχους βάσεων δεδομένων;

Ο πυρήνας EF είναι αγνωστικιστής παρόχου, που σημαίνει ότι μπορεί να στοχεύσει πολλαπλές μηχανές βάσεων δεδομένων μέσω ξεχωριστών πακέτα παρόχων βάσεων δεδομένων.

Συνήθεις Πάροχοι:

Provider NuGet Πακέτο βάση δεδομένων
Ο SQL Server Microsoft.EntityFrameworkCore.SqlServer MSSQL
SQLite Microsoft.EntityFrameworkCore.Sqlite Κινητό/Επιτραπέζιος υπολογιστής
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql MySQL
Cosmos DB Microsoft.EntityFrameworkCore.Cosmos NoSQL

Εσωτερικά, το EF Core χρησιμοποιεί ABStracστρώματα tion για:

  • Μετάφραση ερωτήματος
  • Δημιουργία εντολών SQL
  • Χάρτης τύπων δεδομένωνping

Κάθε πάροχος υλοποιεί τις δικές του κλάσεις που κληρονομούν από την βασική abs του EF Core.tracσεις (π.χ., RelationalDatabaseProvider, QuerySqlGenerator).


44) Τι είναι ένα «διαιρεμένο ερώτημα» και πότε πρέπει να το χρησιμοποιείτε;

Τα διαιρεμένα ερωτήματα εμποδίζουν την εκτέλεση του EF μεγάλες, σύνθετες ενώσεις εκτελώντας πολλά ερωτήματα SQL αντί για ένα.

Παράδειγμα:

var customers = context.Customers
    .Include(c => c.Orders)
    .AsSplitQuery()
    .ToList();

Αυτό εκτελεί:

  1. Ερώτημα 1 → Αποκτήστε πελάτες
  2. Ερώτημα 2 → Λήψη παραγγελιών που σχετίζονται με αυτούς τους πελάτες

οφέλη:

  • Αποτρέπει τα μεγάλα καρτεσιανά γινόμενα.
  • Βελτιώνει την απόδοση με μεγάλα σχετικά σύνολα δεδομένων.

Μειονέκτημα:

Πολλαπλές επισκέψεις μετ' επιστροφής στη βάση δεδομένων.

Χρήση διαιρεμένα ερωτήματα όταν φορτώνετε ανυπόμονα μεγάλα σχετικά δεδομένα που μπορούν να προκαλέσουν προβλήματα μνήμης.


45) Πώς μπορείτε να παρακολουθείτε αποτελεσματικά τις εντολές SQL που δημιουργούνται από EF;

Η παρακολούθηση του SQL βοηθά στην ανίχνευση σφαλμάτων σε αργά ερωτήματα και στη βελτιστοποίηση της συμπεριφοράς του ORM.

Μέθοδοι για την καταγραφή SQL:

  1. Καταγραφή κονσόλας
  2. optionsBuilder
        .UseSqlServer(conn)
        .LogTo(Console.WriteLine, LogLevel.Information);
    
  3. Ενσωμάτωση ILoggerFactory
  4. var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    optionsBuilder.UseLoggerFactory(loggerFactory);
    
  5. Αναχαιτιστές Εφαρμογή DbCommandInterceptor για την καταγραφή εντολών και χρονισμών.
  6. Εργαλεία προφίλ Χρησιμοποιήστε εργαλεία όπως:
    • MiniProfiler
    • Προφίλ διακομιστή SQL
    • Εργαλεία EFCorePower

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


46) Ποια είναι η διαφορά μεταξύ ΑλλαγήςTracker.DetectChanges() και AutoDetectChangesΕνεργοποιημένα;

Χαρακτηριστικό DetectChanges() AutoDetectChangesEnabled
Χαρακτηριστικά Μέθοδος Ιδιοκτησία
Σκοπός Αναγκάζει το EF να σαρώσει tracοντότητες που έχουν κωδικοποιηθεί και ανιχνεύουν αλλαγές Ενεργοποιεί/απενεργοποιεί την αυτόματη ανίχνευση αλλαγών
Προεπιλογή Χειροκίνητο Οι αληθινοί
Χρήση Ρητή έκκληση για βελτιστοποίηση απόδοσης Απενεργοποίηση για μαζικές ενημερώσεις

Παράδειγμα:

context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
    context.Add(item);
}
context.SaveChanges();

Η απενεργοποίηση της αυτόματης ανίχνευσης σε βρόχους βελτιώνει την απόδοση έως και 40% σε μαζικές εργασίες.


47) Πώς χρησιμοποιείτε χρονικούς πίνακες με το EF Core;

Οι χρονικοί πίνακες (που εισήχθησαν στον SQL Server 2016) σάς επιτρέπουν να tracιστορικά δεδομένα k αυτόματα.

Βήματα:

  1. Ενεργοποίηση χρονικής υποστήριξης κατά τη μετεγκατάσταση:
  2. builder.Entity<Employee>()
        .ToTable("Employees", b => b.IsTemporal());
    
  3. Ιστορικά δεδομένα ερωτήματος:
  4. var history = context.Employees
        .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
        .ToList();
    

Πλεονεκτήματα:

  • Ενσωματωμένο ιστορικό δεδομένων tracβασιλιάς
  • Έλεγχος και συμμόρφωση
  • Δεν απαιτούνται χειροκίνητες ενεργοποιήσεις

Το EF Core 6+ υποστηρίζει πλήρη χρονική αναζήτηση.


48) Πώς υποστηρίζει το EF Core μαζί μεταγλωττισμένα ερωτήματα και προ-δημιουργημένα μοντέλα;

Τα μεταγλωττισμένα ερωτήματα και τα μεταγλωττισμένα μοντέλα είναι δύο χαρακτηριστικά απόδοσης που αλληλοσυμπληρώνονται.

Χαρακτηριστικό Σκοπός
Μεταγλωττισμένα ερωτήματα Αποτελέσματα μετάφρασης ερωτήματος προσωρινής αποθήκευσης
Μεταγλωττισμένα μοντέλα Προμεταγλώττιση μεταδεδομένων μοντέλου

Παράδειγμα μεταγλωττισμένου ερωτήματος:

static readonly Func<AppDbContext, int, Customer> _getCustomerById =
    EF.CompileQuery((AppDbContext ctx, int id) =>
        ctx.Customers.FirstOrDefault(c => c.Id == id));

Χρήση:

var customer = _getCustomerById(context, 5);

Μαζί: Τα μεταγλωττισμένα μοντέλα μειώνουν κόστος εκκίνησης, ενώ τα μεταγλωττισμένα ερωτήματα μειώνουν επιβάρυνση ερωτήματος χρόνου εκτέλεσης — ιδανικό για ερωτήματα υψηλής συχνότητας.


49) Ποιες είναι οι συνηθισμένες παγίδες κατά τη χρήση του EF στην αρχιτεκτονική μικροϋπηρεσιών;

Κοινά λάθη:

  1. Κοινόχρηστο DbContext σε όλες τις υπηρεσίες
    → Παραβιάζει την απομόνωση μικρουπηρεσιών.
    → Κάθε μικρουπηρεσία θα πρέπει να έχει το δικό της DbContext και σχήμα.
  2. Ομιλία στην Ομιλία (N+1 Ερωτήματα)
    → Ελαχιστοποίηση ερωτημάτων EF ανά κλήση API.
  3. Υπερβολική πρόθυμη φόρτωση
    → Φορτώστε μόνο ό,τι απαιτείται μέσω DTO.
  4. Κεντρικές Μεταναστεύσεις
    → Κάθε υπηρεσία θα πρέπει να διαχειρίζεται τις δικές της μετεγκαταστάσεις ανεξάρτητα.
  5. Έλλειψη Συναλλακτικών Ορίων
    → Χρησιμοποιήστε κατανεμημένες συναλλαγές (μοτίβο εξερχόμενων) εάν απαιτείται συνέπεια μεταξύ των υπηρεσιών.
  6. Σφιχτή σύζευξη με τον πάροχο SQL
    → Χρήση αποθετηρίου abstracγια να διατηρηθεί η ευελιξία στην επιλογή βάσης δεδομένων.

50) Πώς ενσωματώνεται η εισαγωγή εξαρτήσεων με το DbContext στο ASP.NET Core;

Το Entity Framework ενσωματώνεται άψογα με Ενσωματωμένη Έγχυση Εξαρτήσεων (DI) του ASP.NET Core σύστημα.

Ρύθμιση:

services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("Default")));

Στη συνέχεια, εισάγετέ το σε ελεγκτές ή υπηρεσίες:

public class CustomerService
{
    private readonly AppDbContext _context;
    public CustomerService(AppDbContext context)
    {
        _context = context;
    }
}

Διάρκειες ζωής:

Διάρκεια ζωής Περιγραφή Συνιστάται για
Σκοπός Ένα περιβάλλον ανά αίτημα HTTP Προεπιλογή
Παροδικός Νέα παρουσία κάθε φορά Εργασίες στο παρασκήνιο
Μοναδικό χαρτί Κοινοποιείται παγκοσμίως Αποφύγετε (δεν είναι ασφαλές για νήματα)

Η χρήση του DI διασφαλίζει δοκιμασιμότητα, διαχείριση κύκλου ζωήςκαι αποδοτικότητα των πόρων σε όλες τις διαδικασίες ιστού και στο παρασκήνιο.


🔍 Κορυφαίες ερωτήσεις συνέντευξης για το Entity Framework με σενάρια πραγματικού κόσμου και στρατηγικές απαντήσεις

1) Τι είναι το Entity Framework και γιατί χρησιμοποιείται σε εταιρικές εφαρμογές;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να αξιολογήσει την βασική σας κατανόηση του Entity Framework και την αξία του σε εφαρμογές του πραγματικού κόσμου.

Παράδειγμα απάντησης: Το Entity Framework είναι ένας Αντικειμενο-Σχεσιακός Χάρτηςping Ένα πλαίσιο για το .NET που επιτρέπει στους προγραμματιστές να εργάζονται με βάσεις δεδομένων χρησιμοποιώντας αντικείμενα .NET αντί για ακατέργαστη SQL. Χρησιμοποιείται σε εταιρικές εφαρμογές για τη βελτίωση της παραγωγικότητας, τη μείωση του τυποποιημένου κώδικα πρόσβασης δεδομένων και τη διατήρηση ενός ισχυρού διαχωρισμού των ζητημάτων.


2) Μπορείτε να εξηγήσετε τη διαφορά μεταξύ Code Πρώτον, οι προσεγγίσεις πρώτα στη βάση δεδομένων και πρώτα στο μοντέλο;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να αξιολογήσει τις γνώσεις σας σχετικά με τις διαφορετικές ροές εργασίας ανάπτυξης και πότε να χρησιμοποιείτε την καθεμία.

Παράδειγμα απάντησης: Code Το First ξεκινά με κλάσεις τομέα και δημιουργεί τη βάση δεδομένων από κώδικα. Το Database First ξεκινά με μια υπάρχουσα βάση δεδομένων και δημιουργεί κλάσεις οντοτήτων. Το Model First χρησιμοποιεί έναν οπτικό σχεδιαστή για να ορίσει το μοντέλο και στη συνέχεια δημιουργεί τόσο τον κώδικα όσο και τη βάση δεδομένων. Κάθε προσέγγιση επιλέγεται με βάση τις απαιτήσεις του έργου και την υπάρχουσα υποδομή.


3) Πώς χειρίζεται το Entity Framework τις σχέσεις μεταξύ πινάκων;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής ελέγχει την κατανόησή σας σχετικά με τη μοντελοποίηση δεδομένων και τον σχεσιακό χάρτηping.

Παράδειγμα απάντησης: Το Entity Framework χειρίζεται σχέσεις χρησιμοποιώντας ιδιότητες πλοήγησης και ξένα κλειδιά. Υποστηρίζει σχέσεις ένα-προς-ένα, ένα-προς-πολλά και πολλά-προς-πολλά, επιτρέποντας στους προγραμματιστές να διασχίζουν σχετικά δεδομένα χρησιμοποιώντας αναφορές αντικειμένων αντί για ενώσεις.


4) Περιγράψτε μια περίπτωση όπου βελτιώσατε την απόδοση της βάσης δεδομένων χρησιμοποιώντας το Entity Framework.

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να ακούσει ένα πρακτικό παράδειγμα που να καταδεικνύει δεξιότητες βελτιστοποίησης.

Παράδειγμα απάντησης: Στον προηγούμενο ρόλο μου, βελτίωσα την απόδοση μειώνοντας την περιττή φόρτωση egër και εφαρμόζοντας ερωτήματα προβολής με εντολές Select. Αυτό ελαχιστοποίησε την ποσότητα δεδομένων που ανακτήθηκαν από τη βάση δεδομένων και μείωσε σημαντικά τον χρόνο εκτέλεσης ερωτημάτων.


5) Πώς διαχειρίζεστε τις μετεγκαταστάσεις στο Entity Framework;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής αξιολογεί την εμπειρία σας με τις αλλαγές σχήματος και τον έλεγχο έκδοσης.

Παράδειγμα απάντησης: Οι μετεγκαταστάσεις διαχειρίζονται χρησιμοποιώντας τα ενσωματωμένα εργαλεία μετεγκατάστασης που tracΤο μοντέλο k αλλάζει με την πάροδο του χρόνου. Σε προηγούμενη θέση, δημιουργούσα και εξέταζα τακτικά σενάρια μετεγκατάστασης πριν τα εφαρμόσω, για να διασφαλίσω την ακεραιότητα της βάσης δεδομένων σε όλα τα περιβάλλοντα.


6) Τι είναι η αργή φόρτωση και πότε θα αποφεύγατε τη χρήση της;

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

Παράδειγμα απάντησης: Η αργή φόρτωση φορτώνει αυτόματα τα σχετικά δεδομένα κατά την πρόσβαση σε αυτά. Θα απέφευγα τη χρήση της σε σενάρια ή API κρίσιμα για την απόδοση, επειδή μπορεί να προκαλέσει πολλαπλές ακούσιες κλήσεις βάσης δεδομένων, οδηγώντας στο πρόβλημα ερωτήματος N+1.


7) Πώς χειρίζεστε τις συναλλαγές στο Entity Framework;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής αξιολογεί τις γνώσεις σας σχετικά με τη συνέπεια των δεδομένων και τον χειρισμό σφαλμάτων.

Παράδειγμα απάντησης: Το Entity Framework υποστηρίζει συναλλαγές μέσω των DbContext και TransactionScope. Στην προηγούμενη δουλειά μου, χρησιμοποιούσα σαφείς συναλλαγές για να διασφαλίσω ότι πολλαπλές σχετικές λειτουργίες βάσης δεδομένων είτε ολοκληρώνονταν με επιτυχία μαζί είτε ακυρώνονταν σε περίπτωση αποτυχίας.


8) Εξηγήστε πώς χρησιμοποιείται η ένεση εξαρτήσεων με το Entity Framework.

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να δει πόσο καλά κατανοείτε τη σύγχρονη αρχιτεκτονική εφαρμογών.

Παράδειγμα απάντησης: Η εισαγωγή εξαρτήσεων χρησιμοποιείται για την εισαγωγή του DbContext σε υπηρεσίες ή ελεγκτές. Αυτό βελτιώνει τη δυνατότητα δοκιμής και συντήρησης, επιτρέποντας την τροποποίηση ή την αντικατάσταση του περιβάλλοντος χωρίς να αλλάζει η επιχειρησιακή λογική.


9) Περιγράψτε ένα δύσκολο σφάλμα που αντιμετωπίσατε με το Entity Framework και πώς το λύσατε.

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής αναζητά ικανότητα επίλυσης προβλημάτων και δεξιότητες εντοπισμού σφαλμάτων.

Παράδειγμα απάντησης: Στον τελευταίο μου ρόλο, αντιμετώπισα ένα πρόβλημα με tracδιενέξεις king κατά την ενημέρωση αποσπασμένων οντοτήτων. Το έλυσα ορίζοντας ρητά καταστάσεις οντότητας και διασφαλίζοντας ότι υπήρχε μόνο μία παρουσία κάθε οντότητας. tracεπηρεάζεται από τα συμφραζόμενα.


10) Πώς αποφασίζετε πότε το Entity Framework δεν είναι το σωστό εργαλείο;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να κατανοήσει την κρίση σας και την ικανότητά σας να επιλέγετε κατάλληλες τεχνολογίες.

Παράδειγμα απάντησης: Εξετάζω εναλλακτικές λύσεις όταν οι εφαρμογές απαιτούν εξαιρετικά υψηλής απόδοσης πρόσβαση σε δεδομένα ή σύνθετη λογική αποθηκευμένων διαδικασιών. Σε τέτοιες περιπτώσεις, η χρήση ενός micro-ORM ή ενός raw ADO.NET μπορεί να προσφέρει περισσότερο έλεγχο και αποτελεσματικότητα.

Συνοψίστε αυτήν την ανάρτηση με: