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; }
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; }