/// <summary>
        /// Rollback of entity changes and return full error message
        /// </summary>
        /// <param name="exception">AppException</param>
        /// <returns>Error message</returns>
        public virtual async Task GetFullErrorTextAndRollbackEntityChanges(DbUpdateException exception)
        {
            //rollback entity changes
            if (this is DbContext dbContext)
            {
                try
                {
                    var entries = dbContext.ChangeTracker.Entries()
                                  .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified).ToList();

                    entries.ForEach(entry => entry.State = EntityState.Unchanged);
                }
                catch (Exception ex)
                {
                    exception = new DbUpdateException(exception.ToString(), ex);
                }
            }
            // save previous state
            await base.SaveChangesAsync();

            _exceptionParser.ParseAndRaise(exception);
        }