Sobes.tech
Middle

Τι είναι η παρακολούθηση αλλαγών (change tracking);

sobes.tech AI

Απάντηση από AI

Ο παρακολούθηση αλλαγών είναι ένας μηχανισμός σε ORM (Object-Relational Mapper), όπως το Entity Framework, που παρακολουθεί την κατάσταση των οντοτήτων (αντικειμένων) που έχουν φορτωθεί στο πλαίσιο δεδομένων. Προσδιορίζει ποιες οντότητες έχουν προστεθεί, τροποποιηθεί ή διαγραφεί, ώστε κατά την αποθήκευση των αλλαγών στη βάση δεδομένων να εκτελούνται οι αντίστοιχες εντολές INSERT, UPDATE ή DELETE.

Καταστάσεις οντοτήτων:

  • Added: Το αντικείμενο δημιουργήθηκε πρόσφατα και προστέθηκε στο πλαίσιο, αλλά δεν έχει αποθηκευτεί ακόμα στη βάση δεδομένων.
  • Unchanged: Το αντικείμενο φορτώθηκε από τη βάση ή αποθηκεύτηκε, χωρίς αλλαγές.
  • Modified: Ένα ή περισσότερα χαρακτηριστικά του αντικειμένου έχουν τροποποιηθεί μετά τη φόρτωση ή την αποθήκευση.
  • Deleted: Το αντικείμενο έχει σημειωθεί για διαγραφή από τη βάση δεδομένων.
  • Detached: Το αντικείμενο δεν παρακολουθείται από το πλαίσιο δεδομένων.
// Παράδειγμα παρακολούθησης αλλαγών στο Entity Framework Core
using (var context = new MyDbContext())
{
    // Φόρτωση οντότητας
    var myEntity = context.MyEntities.Find(1);

    // Έλεγχος αρχικής κατάστασης
    Console.WriteLine($"Αρχική κατάσταση: {context.Entry(myEntity).State}"); // Θα εμφανίσει Unchanged

    // Τροποποίηση ιδιότητας
    myEntity.MyProperty = "Νέα Τιμή";

    // Έλεγχος κατάστασης μετά την τροποποίηση
    Console.WriteLine($"Κατάσταση μετά την τροποποίηση: {context.Entry(myEntity).State}"); // Θα εμφανίσει Modified

    // Προσθήκη νέας οντότητας
    var newEntity = new MyEntity { MyProperty = "Άλλη Νέα" };
    context.MyEntities.Add(newEntity);

    // Έλεγχος κατάστασης της νέας οντότητας
    Console.WriteLine($"Κατάσταση της νέας οντότητας: {context.Entry(newEntity).State}"); // Θα εμφανίσει Added

    // Σημείωση για διαγραφή
    context.MyEntities.Remove(myEntity);

    // Έλεγχος κατάστασης μετά τη διαγραφή
    Console.WriteLine($"Κατάσταση μετά τη διαγραφή: {context.Entry(myEntity).State}"); // Θα εμφανίσει Deleted

    // Αποθήκευση αλλαγών στη βάση
    context.SaveChanges();
}