entity framework tutorial تحقق مما إذا كان هناك أي تغييرات معلقة ليتم حفظها



entity framework شرح (3)

هل هناك طريقة لمعرفة ما إذا كانت هناك تغييرات غير محفوظة في سياق الكيان ، في إطار الكيان؟


Answer #1

قد يعمل هذا (إذا كنت تعني عن طريق التغييرات ، العناصر التي تمت إضافتها وإزالتها وتعديلها):

bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
                    ) > 0;

تصحيح:

كود محسّن:

bool changesMade = context.
                   ObjectStateManager.
                   GetObjectStateEntries(EntityState.Added | 
                                         EntityState.Deleted | 
                                         EntityState.Modified
                                        ).Any();

Answer #2

بدءا من EF 6 ، هناك context.ChangeTracker.HasChanges() .


Answer #3

لأولئك الذين يستخدمون EF 4+ ، هنا هو حل يعادل كطريقة تمديد:

public static class DbContextExtensions {
    public static Boolean HasPendingChanges(this DbContext context) {
        return context.ChangeTracker.Entries()
                      .Any(e => e.State == EntityState.Added
                             || e.State == EntityState.Deleted
                             || e.State == EntityState.Modified);
    }
}

لاحظ أنه لا يمكنك دمج القيم كقناع بت. معالجة الدالة GetObjectStateEntries() منطق لك ولكن لن LINQ نتائج المناسبة.





entity-framework-6