public override int SaveChanges()
        {
            try
            {
                var modifiedEntries = ChangeTracker.Entries()
                                      .Where(x => x.Entity is AuditableEntity &&
                                             (x.State == System.Data.Entity.EntityState.Added || x.State == System.Data.Entity.EntityState.Modified));

                foreach (var entry in modifiedEntries)
                {
                    AuditableEntity entity = entry.Entity as AuditableEntity;
                    if (entity != null)
                    {
                        string identityName      = Thread.CurrentPrincipal.Identity.Name;
                        LocalDateTimeService obj = new LocalDateTimeService();
                        DateTime             now = obj.GetDateTime();

                        if (entry.State == System.Data.Entity.EntityState.Added)
                        {
                            entity.CreatedBy = identityName;
                            entity.CreatedOn = now;
                        }
                        else if (entry.State == System.Data.Entity.EntityState.Modified)
                        {
                            entity.UpdatedBy = identityName;
                            entity.UpdatedOn = now;
                        }
                        else
                        {
                            base.Entry(entity).Property(x => x.CreatedBy).IsModified = false;
                            base.Entry(entity).Property(x => x.CreatedOn).IsModified = false;
                            entity.UpdatedBy = identityName;
                            entity.UpdatedOn = now;
                        }
                    }
                }
                return(base.SaveChanges());
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }