예제 #1
0
        public void Put(PutAuthorView author)
        {
            Author authorModel = _authorRepository.Get(author.Id);

            authorModel.Name     = author.Name;
            authorModel.Birthday = author.Birthday;
            authorModel.Deathday = author.Deathday;
            _authorRepository.Update(authorModel);

            IEnumerable <int> selectedBooks  = author.Books.Select(id => id.Id);
            List <BookAuthor> oldAuthorBooks = _bookInAuthorRepository.GetAllByAuthorId(author.Id);
            var oldAuthorBooksWithRelation   = oldAuthorBooks.Where(x => x.BookId != 0).ToList();
            var intersectBooks = oldAuthorBooksWithRelation.Select(x => x.BookId).Intersect(selectedBooks).ToList();
            var exceptBooks    = oldAuthorBooksWithRelation.Select(x => x.BookId).Except(selectedBooks).ToList();

            _bookInAuthorRepository.Delete(oldAuthorBooks.Where(x => exceptBooks.Contains(x.BookId)).ToList());

            var currentAuthorBooks = new List <BookAuthor>();

            foreach (var newBookId in selectedBooks)
            {
                if (intersectBooks.FirstOrDefault(x => x == newBookId) == 0)
                {
                    currentAuthorBooks.Add(new BookAuthor()
                    {
                        AuthorId = authorModel.Id, BookId = newBookId
                    });
                }
            }
            _bookInAuthorRepository.Insert(currentAuthorBooks);
        }
예제 #2
0
        public void Put(PutBookView book)
        {
            Book bookModel = _bookRepository.Get(book.Id);

            bookModel.Name             = book.Name;
            bookModel.YearOfPublishing = book.YearOfPublishing;
            _bookRepository.Update(bookModel);

            IEnumerable <int> selectedAuthors = book.Authors.Select(id => id.Id);
            List <BookAuthor> oldBookAuthors  = _bookInAuthorRepository.GetAllByBookId(book.Id);
            var oldBookAuthorsWithRelation    = oldBookAuthors.Where(x => x.AuthorId != 0).ToList();
            var intersectAuthors = oldBookAuthorsWithRelation.Select(x => x.AuthorId).Intersect(selectedAuthors).ToList();
            var exceptAuthors    = oldBookAuthorsWithRelation.Select(x => x.AuthorId).Except(selectedAuthors).ToList();

            _bookInAuthorRepository.Delete(oldBookAuthors.Where(x => exceptAuthors.Contains(x.AuthorId)).ToList());

            var currentBookAuthors = new List <BookAuthor>();

            foreach (var newAuthorId in selectedAuthors)
            {
                if (intersectAuthors.FirstOrDefault(x => x == newAuthorId) == 0)
                {
                    currentBookAuthors.Add(new BookAuthor()
                    {
                        BookId = bookModel.Id, AuthorId = newAuthorId
                    });
                }
            }
            _bookInAuthorRepository.Insert(currentBookAuthors);

            IEnumerable <int>           selectedPblicationHouses = book.PublicationHouses.Select(id => id.Id);
            List <BookPublicationHouse> oldPublicationHouses     = _bookInPublicationHouseRepository.GetAllByBookId(book.Id);
            var oldBookPublicationHousesWithRelation             = oldPublicationHouses.Where(x => x.PublicationHouseId != 0).ToList();
            var intersectPublicationHouses = oldBookPublicationHousesWithRelation.Select(x => x.PublicationHouseId).Intersect(selectedPblicationHouses).ToList();
            var exceptPublicationHouses    = oldBookPublicationHousesWithRelation.Select(x => x.PublicationHouseId).Except(selectedPblicationHouses).ToList();

            _bookInPublicationHouseRepository.Delete(oldPublicationHouses.Where(x => exceptPublicationHouses.Contains(x.PublicationHouseId)).ToList());

            var currentBookPublicationHouses = new List <BookPublicationHouse>();

            foreach (var newPublicationHouseId in selectedPblicationHouses)
            {
                if (intersectPublicationHouses.FirstOrDefault(x => x == newPublicationHouseId) == 0)
                {
                    currentBookPublicationHouses.Add(new BookPublicationHouse()
                    {
                        BookId = bookModel.Id, PublicationHouseId = newPublicationHouseId
                    });
                }
            }
            _bookInPublicationHouseRepository.Insert(currentBookPublicationHouses);
        }