示例#1
0
        public async Task <IActionResult> Edit(BookCreateViewModel ViewModel)
        {
            if (!ModelState.IsValid)
            {
                try
                {
                    DateTime?PublishDate;
                    if (ViewModel.IsPublish == true && ViewModel.RecentIsPublish == false)
                    {
                        PublishDate = DateTime.Now;
                    }
                    else if (ViewModel.RecentIsPublish == true && ViewModel.IsPublish == false)
                    {
                        PublishDate = null;
                    }

                    else
                    {
                        PublishDate = ViewModel.PublishDate;
                    }

                    BookStor book = new BookStor()
                    {
                        BookId      = ViewModel.BookId,
                        Title       = ViewModel.Title,
                        ISBN        = ViewModel.ISBN,
                        NumOfPages  = ViewModel.NumOfPages,
                        Price       = ViewModel.Price,
                        Stock       = ViewModel.Stock,
                        IsPublish   = ViewModel.IsPublish,
                        LanguageID  = ViewModel.LanguageID,
                        PublisherID = ViewModel.PublisherID,
                        PublishYear = ViewModel.PublishYear,
                        Summary     = ViewModel.Summary,
                        Weight      = ViewModel.Weight,
                        PublishDate = PublishDate,
                        Delete      = false,
                    };

                    _context.Update(book);

                    var RecentAuthors = (from a in _context.Auther_Books
                                         where (a.BookId == ViewModel.BookId)
                                         select a.AutherId).ToArray();

                    var RecentTranslators = (from a in _context.Translator_Books
                                             where (a.BookId == ViewModel.BookId)
                                             select a.TranslaorId).ToArray();



                    var DeletedAuthors     = RecentAuthors.Except(ViewModel.AuthorID);
                    var DeletedTranslators = RecentTranslators.Except(ViewModel.TranslatorID);


                    var AddedAuthors     = ViewModel.AuthorID.Except(RecentAuthors);
                    var AddedTranslators = ViewModel.TranslatorID.Except(RecentTranslators);


                    if (DeletedAuthors.Count() != 0)
                    {
                        _context.RemoveRange(DeletedAuthors.Select(a => new Auther_book {
                            AutherId = a, BookId = ViewModel.BookId
                        }).ToList());
                    }

                    if (DeletedTranslators.Count() != 0)
                    {
                        _context.RemoveRange(DeletedTranslators.Select(a => new Translator_Book {
                            TranslaorId = a, BookId = ViewModel.BookId
                        }).ToList());
                    }


                    if (AddedAuthors.Count() != 0)
                    {
                        _context.AddRange(AddedAuthors.Select(a => new Auther_book {
                            AutherId = a, BookId = ViewModel.BookId
                        }).ToList());
                    }

                    if (AddedTranslators.Count() != 0)
                    {
                        _context.AddRange(AddedTranslators.Select(a => new Translator_Book {
                            TranslaorId = a, BookId = ViewModel.BookId
                        }).ToList());
                    }

                    await _context.SaveChangesAsync();

                    ViewBag.MsgSuccess = "ذخیره تغییرات با موفقیت انجام شد.";
                    return(View(ViewModel));
                }

                catch
                {
                    ViewBag.MsgFailed = "در ذخیره تغییرات خطایی رخ داده است.";
                }
            }

            ViewBag.AuthorID = new SelectList(_context.Authers.Select(r => new ListAuther {
                AutherId = r.AutherId, NameFamily = r.Name + " " + r.LastName
            }), "AutherId", "NameFamily");
            ViewBag.LanguageID   = new SelectList(_context.Languges, "LanguegeName", "LanguegeName");
            ViewBag.PublisherID  = new SelectList(_context.Publishers, "PublisherId", "PublisherName");
            ViewBag.TranslatorID = new SelectList(_context.Translators.Select(r => new ListTranslator {
                TranslatorId = r.TranslaorId, NameFamily = r.Name + " " + r.LastName
            }), "TranslatorId", "NameFamily");
            return(View(ViewModel));
        }