public override int SaveChanges()
        {
            var timeSpan = new TimeSpan(0, 30, 0);

            ChangeTracker.DetectChanges();

            using (var entitiesTransactionScope = new TransactionScope(TransactionScopeOption.Required, timeSpan))
            {
#if DEBUG
                try
                {
#endif
                var entityAudits = _entityAuditService.AuditDbEntityEntries(ChangeTracker.Entries()).ToList();
                var result       = base.SaveChanges();

                entitiesTransactionScope.Complete();

                using (var entityAuditsTransactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, timeSpan))
                {
                    entityAudits = _entityAuditService.UpdateEntityAuditEntityIdsIfRequired(ChangeTracker.Entries(), entityAudits.ToList()).ToList();
                    EntitySet <EntityAudit>().AddRange(entityAudits);
                    base.SaveChanges();
                    entityAuditsTransactionScope.Complete();
                }

                return(result);

#if DEBUG
            }
            catch (DbEntityValidationException dbEntityValidationException)
            {
                foreach (var entityValidationError in dbEntityValidationException.EntityValidationErrors)
                {
                    Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", entityValidationError.Entry.Entity.GetType().Name, entityValidationError.Entry.State);

                    foreach (var validationError in entityValidationError.ValidationErrors)
                    {
                        Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
                throw;
            }
#endif
            }
        }