internal static void Restore(T entity, NavigationBackupSet backup)
        {
            if (entity == null || backup == null || backup.Values == null ||
                backup.Values.Length == 0 || backup.Values.Length != PropertiesToBackup.Count)
            {
                return;
            }

            for (int index = 0; index < PropertiesToBackup.Count; index++)
            {
                var propInfo = PropertiesToBackup[index];
                propInfo.SetValue(entity, backup.Values[index], null);
            }
        }
        protected virtual void DeleteEntity <T>(T entity) where T : class
        {
            NavigationBackupSet backupSet = null;

            try
            {
                backupSet = NavigationBackup <T> .BackupAndReset(entity);

                Context.Write <T>().Attach(entity);
                Context.Write <T>().Remove(entity);
                Context.SaveChanges();
            }
            finally
            {
                NavigationBackup <T> .Restore(entity, backupSet);
            }
        }
        protected virtual void UpdateEntity <T>(T entity) where T : class
        {
            NavigationBackupSet backupSet = null;

            try
            {
                backupSet = NavigationBackup <T> .BackupAndReset(entity);

                Context.Entry(entity).State = EntityState.Modified;
                Context.SaveChanges();
                Context.Entry(entity).State = EntityState.Detached;
            }
            finally
            {
                NavigationBackup <T> .Restore(entity, backupSet);
            }
        }