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; }
public AuthorsViewModel() { MOYABAZAEntities model = App.MOYABAZA; model.Авторы.Load(); Authors = CollectionViewSource.GetDefaultView(model.Авторы.Local); AddModeCommand = new RelayCommand( (param) => { SelectedAuthor = null; EditAllowed = true; }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.W == 1) != 0); ChangeModeCommand = new RelayCommand( (param) => { EditAllowed ^= true; }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.E == 1) != 0 && param != null); SaveCommand = new RelayCommand( (param) => { if (SelectedAuthor != null) { if (FName != String.Empty && SName != String.Empty && TName != String.Empty) //Изменение существующего города { try { SelectedAuthor.Имя = FName; SelectedAuthor.Фамилия = SName; SelectedAuthor.Отчество = TName; model.SaveChanges(); Authors.Refresh(); EditAllowed = false; } catch (Exception e) { MessageBox.Show($"Такой город уже существует! \n {e.Message}"); } } else { MessageBox.Show("ФИО не может быть пустым!"); FName = SelectedAuthor.Имя; SName = SelectedAuthor.Фамилия; TName = SelectedAuthor.Отчество; } } else { if (FName != String.Empty && SName != String.Empty && TName != String.Empty) //Добавление нового города { Авторы author = new Авторы(); try { author.Имя = FName; author.Фамилия = SName; author.Отчество = TName; model.Авторы.Local.Add(author); model.SaveChanges(); EditAllowed = false; FName = String.Empty; SName = String.Empty; TName = String.Empty; } catch (DbUpdateException e) { model.Авторы.Local.Remove(author); MessageBox.Show($"Такой автор уже существует! \n {e.Message}"); } } else { MessageBox.Show("Название не может быть пустым!"); } } }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true); DeleteCommand = new RelayCommand( (param) => { if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { var deletedAuthor = _selectedAuthor; try { if (deletedAuthor.Книги.Count != 0) { throw new DbUpdateException("В авторе есть книги!!!!"); } model.Авторы.Local.Remove(deletedAuthor); model.SaveChanges(); } catch (DbUpdateException ex) { model.Авторы.Local.Add(deletedAuthor); Authors.MoveCurrentTo(deletedAuthor); Authors.Refresh(); MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); } } }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.AuthorThesaurusName && uo.D == 1) != 0 && param != null); Authors.Filter = FilterFunction; }
public CityViewModel() { MOYABAZAEntities model = App.MOYABAZA; model.Города.Load(); Cities = CollectionViewSource.GetDefaultView(model.Города.Local); AddModeCommand = new RelayCommand( (param) => { SelectedCity = null; EditAllowed = true; //model.Города.Local.Add(city); }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.W == 1) != 0); ChangeModeCommand = new RelayCommand( (param) => { EditAllowed ^= true; }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.E == 1) != 0 && param != null); SaveCommand = new RelayCommand( (param) => { if (SelectedCity != null) { if (CityTextBox != String.Empty) //Изменение существующего города { try { SelectedCity.Название = CityTextBox; model.SaveChanges(); Cities.Refresh(); EditAllowed = false; } catch (Exception e) { MessageBox.Show($"Такой город уже существует! \n {e.Message}"); } } else { MessageBox.Show("Название не может быть пустым!"); CityTextBox = SelectedCity.Название; } } else { if (CityTextBox != String.Empty) //Добавление нового города { Города city = new Города(); try { city.Название = CityTextBox; model.Города.Local.Add(city); model.SaveChanges(); EditAllowed = false; CityTextBox = String.Empty; } catch (DbUpdateException e) { model.Города.Local.Remove(city); MessageBox.Show($"Такой город уже существует! \n {e.Message}"); } } else { MessageBox.Show("Название не может быть пустым!"); } } }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && (uo.E == 1 || uo.R == 1)) != 0 && Convert.ToBoolean(param) == true); DeleteCommand = new RelayCommand( (param) => { if (MessageBox.Show("Уверен?", "Назад дороги не будет", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { var deletedCity = _selectedCity; try { if (deletedCity.Книги.Count != 0) { throw new DbUpdateException("В городе есть книги!!!!"); } model.Города.Local.Remove(deletedCity); model.SaveChanges(); } catch (DbUpdateException ex) { model.Города.Local.Add(deletedCity); Cities.MoveCurrentTo(deletedCity); Cities.Refresh(); MessageBox.Show($"Произошла ошибка при удалении данных: {Environment.CommandLine}{ex.Message}", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); } } }, (param) => App.ActiveUser.Пользователи_Объекты.Count(uo => uo.Объекты.SName == Constants.CityThesaurusName && uo.D == 1) != 0 && param != null); Cities.Filter = FilterFunction; }