سؤال

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

هل كانت مفيدة؟

المحلول

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

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();

نصائح أخرى

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

لأولئك منكم الذين يستخدمون 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 لن تحقق نتائج مناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top