تحقق مما إذا كانت هناك أي تغييرات معلقة ليتم حفظها
سؤال
هل هناك طريقة لمعرفة ما إذا كانت هناك تغييرات غير محفوظة في سياق الكيان الخاص بي ، في إطار الكيان؟
المحلول
قد يعمل هذا (إذا كان من خلال التغييرات تعني الإضافة وإزالتها وتعديلها):
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 لن تحقق نتائج مناسبة.
لا تنتمي إلى StackOverflow