private void RegisterUser(PasswordBox sender)
        {
            using (var context = new BookOrdersContext()) {
                using (DbContextTransaction transaction =
                           context.Database.BeginTransaction(IsolationLevel.RepeatableRead)) {
                    try {
                        NewUser.Login    = Regex.Replace(NewUser.Login.Trim(), @"\s+", " ");
                        NewUser.Password = _BCrypt.HashPassword(sender.Password.Trim(), 12);
                        context.Users.Add(NewUser);
                        context.SaveChanges();
                        transaction.Commit();
                    } catch (Exception e) {
                        Exception innerException = e;
                        while (innerException?.InnerException != null)
                        {
                            innerException = innerException.InnerException;
                        }

                        transaction.Rollback();
                        MessageBox.Show(innerException?.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }

                    RegisterConfirmed?.Invoke(NewUser);
                }
            }
        }
        private static void PreviewKeyDown(object eventArgs)
        {
            var tempEventArgs = (object[])eventArgs;

            if (!(tempEventArgs[0] is KeyEventArgs e && tempEventArgs[1] is DataGrid sender))
            {
                throw new ArgumentException("Bad arguments in PreviewKeyDown");
            }

            switch (e.Key)
            {
            case Key.Escape:
                sender.CancelEdit();
                sender.CancelEdit();
                return;

            case Key.Delete:
                if (!(sender.SelectedItem is Genre genre))
                {
                    return;
                }
                using (var context = new BookOrdersContext()) {
                    context.Genres.Attach(genre);
                    context.Genres.Remove(genre);
                    context.SaveChanges();
                }

                return;
            }
        }
예제 #3
0
        protected static void PreviewKeyDown(object eventArgs)
        {
            var tempEventArgs = (object[])eventArgs;

            if (!(tempEventArgs[0] is KeyEventArgs e && tempEventArgs[1] is DataGrid sender))
            {
                throw new ArgumentException("Bad arguments in PreviewKeyDown");
            }

            switch (e.Key)
            {
            case Key.Escape:
                sender.CancelEdit();
                sender.CancelEdit();
                return;

            case Key.Delete:
                if (!(sender.SelectedItem is TEntity entity))
                {
                    return;
                }
                using (var context = new BookOrdersContext()) {
                    try {
                        PropertyInfo property =
                            context.GetType().GetProperty(typeof(TEntity).Name.Replace("And", "sAnd") + 's');
                        if (property != null)
                        {
                            ((DbSet <TEntity>)property.GetValue(context)).Attach(entity);
                            ((DbSet <TEntity>)property.GetValue(context)).Remove(entity);
                        }

                        context.SaveChanges();
                    } catch (DbUpdateException exception) {
                        if (!(exception.InnerException is UpdateException innerException))
                        {
                            throw;
                        }
                        if (!(innerException.InnerException is Npgsql.PostgresException innerInnerException))
                        {
                            throw;
                        }
                        if (innerInnerException.SqlState == "23503")
                        {
                            MessageBox.Show(innerInnerException.MessageText,
                                            "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                            e.Handled = true;
                        }
                        else
                        {
                            throw;
                        }
                    }
                }

                return;
            }
        }
        private static void PreviewKeyDown(object eventArgs)
        {
            var tempEventArgs = (object[])eventArgs;

            if (!(tempEventArgs[0] is KeyEventArgs e && tempEventArgs[1] is DataGrid sender))
            {
                throw new ArgumentException("Bad arguments in PreviewKeyDown");
            }

            switch (e.Key)
            {
            case Key.Escape:
                sender.CancelEdit();
                sender.CancelEdit();
                return;

            case Key.Delete:
                if (!(sender.SelectedItem is LiteratureType literatureType))
                {
                    return;
                }
                using (var context = new BookOrdersContext()) {
                    try {
                        context.LiteratureTypes.Attach(literatureType);
                        context.LiteratureTypes.Remove(literatureType);
                        context.SaveChanges();
                    } catch (DbUpdateException exception) {
                        if (!(exception.InnerException is UpdateException innerException))
                        {
                            throw;
                        }
                        if (!(innerException.InnerException is Npgsql.PostgresException innerInnerException))
                        {
                            throw;
                        }
                        if (innerInnerException.SqlState == "23503")
                        {
                            MessageBox.Show("There are some genres that link to this literature type. Delete them first.",
                                            "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                            e.Handled = true;
                        }
                        else
                        {
                            throw;
                        }
                    }
                }

                return;
            }
        }
예제 #5
0
        protected static void DataGridRowEditEnding(object eventArgs)
        {
            var tempEventArgs = (object[])eventArgs;

            if (!(tempEventArgs[0] is DataGridRowEditEndingEventArgs e && tempEventArgs[1] is DataGrid sender))
            {
                throw new ArgumentException("Bad arguments in PreviewKeyDown");
            }

            if (e.EditAction == DataGridEditAction.Cancel || !(e.Row.Item is TEntity entity) ||
                !entity.Validator.IsValid ||
                !entity.IsDirty)
            {
                return;
            }

            using (var context = new BookOrdersContext()) {
                try {
                    if (e.Row.IsNewItem)
                    {
                        PropertyInfo property =
                            context.GetType().GetProperty(typeof(TEntity).Name.Replace("And", "sAnd") + 's');
                        if (property != null)
                        {
                            ((DbSet <TEntity>)property.GetValue(context)).Add(entity);
                        }
                    }
                    else
                    {
                        context.Entry(entity).State = EntityState.Modified;
                    }

                    context.SaveChanges();
                } catch (Exception exception) {
                    sender.CancelEdit();
                    sender.CancelEdit();
                    Exception innerException = exception;
                    while (innerException?.InnerException != null)
                    {
                        innerException = innerException.InnerException;
                    }

                    MessageBox.Show(innerException?.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
        private void AddNewEntity(object sender)
        {
            using (var context = new BookOrdersContext()) {
                using (DbContextTransaction transaction =
                           context.Database.BeginTransaction(IsolationLevel.RepeatableRead)) {
                    try {
                        if (!Publishers.Any(NewPublisher.Equals))
                        {
                            context.Publishers.Add(NewPublisher);
                        }

                        NewBook.PublisherId = NewPublisher.Id;
                        if (!Books.Any(NewBook.Equals))
                        {
                            context.Books.Add(NewBook);
                        }

                        if (!Authors.Any(NewAuthor.Equals))
                        {
                            NewAuthor.Id = 0;
                            context.Authors.Add(NewAuthor);
                        }

                        NewBookAndAuthor.AuthorId = NewAuthor.Id;
                        NewBookAndAuthor.ISBN     = NewBook.ISBN;
                        context.BooksAndAuthors.Add(NewBookAndAuthor);
                        context.SaveChanges();
                        transaction.Commit();
                    } catch (Exception e) {
                        Exception innerException = e;
                        while (innerException?.InnerException != null)
                        {
                            innerException = innerException.InnerException;
                        }

                        transaction.Rollback();
                        MessageBox.Show(innerException?.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }

                    AddedNewEntity?.Invoke();
                }
            }
        }
        private static void DataGridRowEditEnding(DataGridRowEditEndingEventArgs e)
        {
            if (e.EditAction == DataGridEditAction.Cancel || !(e.Row.Item is Genre genre) || !genre.Validator.IsValid ||
                !genre.IsDirty)
            {
                return;
            }

            using (var context = new BookOrdersContext()) {
                if (e.Row.IsNewItem)
                {
                    context.Genres.Add(genre);
                }
                else
                {
                    context.Entry(genre).State = EntityState.Modified;
                }

                context.SaveChanges();
            }
        }