コード例 #1
0
        public ReadersViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Читатели.Load();
            Readers = CollectionViewSource.GetDefaultView(model.Читатели.Local);

            AddCommand = new RelayCommand(
                (param) =>
            {
                Читатели reader       = new Читатели();
                ReadersReg readersReg = new ReadersReg(model, reader);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    model.Читатели.Local.Add(reader);
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Читатели.Local.Remove(reader);
                        MessageBox.Show($"Такой reader уже существует! \n {e.Message}");
                    }
                    Readers.Refresh();
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.W == 1) != 0);

            ChangeCommand = new RelayCommand(
                (param) =>
            {
                ReadersReg readersReg = new ReadersReg(model, _selectedReader);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Entry(_selectedReader).State = EntityState.Unchanged;
                        MessageBox.Show($"Такой reader уже существует! \n {e.Message}");
                    }
                    Readers.Refresh();
                }
                else
                {
                    model.Entry(_selectedReader).State = EntityState.Unchanged;
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null);

            DeleteCommand = new RelayCommand(
                (param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    try
                    {
                        if (_selectedReader.Выданные_книги.Count != 0)
                        {
                            throw new DbUpdateException("У читателя есть выданные книги!!!!");
                        }
                        model.Читатели.Remove(_selectedReader);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.D == 1) != 0 && param != null);

            ReturnBookCommand = new RelayCommand(
                (param) =>
            {
                IssuingBooksFormMVVM issuingBooksForm = new IssuingBooksFormMVVM(SelectedReader);
                issuingBooksForm.ShowDialog();
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null); // Возможно нужно добавить ещё уровень доступа

            IssueBookCommand = new RelayCommand(
                (param) =>
            {
                IssuingBooksReader issuingBooksReader = new IssuingBooksReader(SelectedReader);
                issuingBooksReader.ShowDialog();
            },
                (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.ReadersName && uo.E == 1) != 0 && param != null); // Возможно нужно добавить ещё уровень доступа

            Readers.Filter = FilterFunction;
        }
コード例 #2
0
        public BooksViewModel()
        {
            MOYABAZAEntities model = App.MOYABAZA;

            model.Книги.Load();
            Books = CollectionViewSource.GetDefaultView(model.Книги.Local);

            AddCommand = new RelayCommand((param) =>
            {
                Книги book          = new Книги();
                BooksReg readersReg = new BooksReg(model, book);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    model.Книги.Local.Add(book);
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Книги.Local.Remove(book);
                        MessageBox.Show($"Такой книга уже существует! \n {e.Message}");
                    }
                    Books.Refresh();
                }
            },
                                          (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.W == 1) != 0);

            ChangeCommand = new RelayCommand((param) =>
            {
                BooksReg readersReg = new BooksReg(model, _selectedBook);
                readersReg.ShowDialog();
                if (readersReg.DialogResult == true)
                {
                    try
                    {
                        model.SaveChanges();
                    }
                    catch (DbUpdateException e)
                    {
                        model.Entry(_selectedBook).State = EntityState.Unchanged;
                        MessageBox.Show($"Такой book уже существует! \n {e.Message}");
                    }
                    Books.Refresh();
                }
                else
                {
                    model.ChangeTracker.DetectChanges();
                    var objectContext  = ((IObjectContextAdapter)model).ObjectContext;
                    var addedRelations = objectContext
                                         .ObjectStateManager
                                         .GetObjectStateEntries(EntityState.Added)
                                         .Where(e => e.IsRelationship)
                                         .Select(
                        e => new
                    {
                        B = objectContext.GetObjectByKey((EntityKey)e.CurrentValues[1]),
                        A = objectContext.GetObjectByKey((EntityKey)e.CurrentValues[0])
                    });
                    foreach (var r in addedRelations)
                    {
                        objectContext
                        .ObjectStateManager
                        .ChangeRelationshipState <Книги>(r.B as Книги, r.A, (b2) => b2.Авторы, EntityState.Detached);
                    }

                    var removedRelations = objectContext
                                           .ObjectStateManager
                                           .GetObjectStateEntries(EntityState.Deleted)
                                           .Where(e => e.IsRelationship)
                                           .Select(
                        e => new
                    {
                        B = objectContext.GetObjectByKey((EntityKey)e.OriginalValues[1]),
                        A = objectContext.GetObjectByKey((EntityKey)e.OriginalValues[0])
                    });
                    foreach (var r in removedRelations)
                    {
                        objectContext
                        .ObjectStateManager
                        .ChangeRelationshipState <Книги>(r.B as Книги, r.A, (b2) => b2.Авторы, EntityState.Unchanged);
                    }
                    //TODO: Исправить удаление экземпляра книги по кнопке отмена

                    model.Entry(_selectedBook).State = EntityState.Unchanged;
                }
            },
                                             (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.E == 1) != 0 && param != null);

            DeleteCommand = new RelayCommand((param) =>
            {
                if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    var deletedBook = _selectedBook;

                    try
                    {
                        if (deletedBook.Экземпляры_книги.Count != 0)
                        {
                            throw new DbUpdateException("У книги есть экземпляры!!!!");
                        }
                        model.Книги.Local.Remove(deletedBook);
                        model.SaveChanges();
                    }
                    catch (DbUpdateException ex)
                    {
                        model.Книги.Local.Add(deletedBook);
                        Books.MoveCurrentTo(deletedBook);
                        Books.Refresh();
                        MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            },
                                             (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.BooksThesaurusName && uo.D == 1) != 0 && param != null);

            Books.Filter = FilterFunction;
        }