Обновление двух связанных таблиц - PullRequest
0 голосов
/ 15 февраля 2020

Я реализую asp. net основной проект. В моем классе Controller, в его методе Edit, я написал некоторый код, подобный приведенному ниже:

 public async Task<IActionResult> Edit(int id, ApplicantViewModel applicant)
    {
        var formerApplicantType = await _context.Applicant
            .Include(a => a.ApplicantTypeNavigation)
            .FirstOrDefaultAsync(m => m.ApplicantId == id);

        if (id != applicant.applicantvm.ApplicantId)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                if (applicant.applicantvm.ApplicantType == 1)
                {
                    var UpdQuery = from a in _context.Applicant
                                   join p in _context.PersonApplicant on a.ApplicantId
                                   equals p.ApplicantId
                                   where applicant.applicantvm.ApplicantId == a.ApplicantId && applicant.applicantvm.ApplicantType == a.ApplicantType
                                   select new { a, p };

                    if (formerApplicantType.ApplicantType == 2)
                    {
                        Debug.WriteLine("opposite applicantType");

                        var legalApplicantForDelete = await _context.LegalApplicant.FindAsync(id);
                        _context.LegalApplicant.Remove(legalApplicantForDelete);

                        //?????
                        var pa = new PersonApplicant()
                        {
                            BirthCertificateNo = applicant.personapplicantvm.BirthCertificateNo,
                            IssuePlace = applicant.personapplicantvm.IssuePlace,
                            NationalCode = applicant.personapplicantvm.NationalCode,
                            Username = applicant.personapplicantvm.Username,
                            Applicant = applicant.applicantvm
                        };
                        using (var context = new CSSDDashboardContext())
                        {
                            context.PersonApplicant.Add(pa);
                            context.SaveChanges();
                        }
                    }
                    else
                    {


                        //----------------------------------------------
                        foreach (var x in UpdQuery.ToList())
                        {
                            x.a.ApplicantType = applicant.applicantvm.ApplicantType;
                            x.a.Address = applicant.applicantvm.Address;
                            x.a.Description = applicant.applicantvm.Description;
                            x.a.Name = applicant.applicantvm.Name;
                            x.p.BirthCertificateNo = applicant.personapplicantvm.BirthCertificateNo;
                            x.p.NationalCode = applicant.personapplicantvm.NationalCode;
                            x.p.IssuePlace = applicant.personapplicantvm.IssuePlace;
                            x.p.Username = applicant.personapplicantvm.Username;

                        }
                    }

                await _context.SaveChangesAsync();

            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ApplicantExists(applicant.applicantvm.ApplicantId))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction(nameof(Index));
        }
        ViewData["ApplicantType"] = new SelectList(_context.EntityType, "Id", "Id", applicant.applicantvm.ApplicantType);
        return View(applicant);
    }

В моем коде у меня есть 3 таблицы Applicant и PersonApplicant и LegalApplicant. Кандидат имеет личные отношения с LegalApplicant и PersonApplicant. Каждый раз заявитель ссылается на один из них. Они связаны друг с другом как первичный ключ {ApplicantID, ApplicantType}, и если ApplicantType равен 1, «Заявитель» относится к PersonApplicant, а если «2», «Заявитель» относится к LegalApplicant. В представлении пользователь должен выбрать из списка выбора тип заявителя, которого он хочет обновить. Теперь моя проблема заключается в обновлении этих таблиц, когда пользователь хочет изменить ApplicantType. Например, если пользователь меняет ApplicantType с LegalApplicant на PersonApplicant, тогда прежняя запись в Legal заявителя должна быть удалена в соответствии с тем, что я сделал в коде, и новая запись должна быть вставлена ​​в PersonApplicant. Для этого я написал как приведенный выше код, но после запуска проекта, он показывает мне ошибку, которая вот-вот не принимает существующую запись кандидата, а просто ссылается на другую таблицу. В моей методологии я не могу удалить соответствующую запись в заявителе и снова вставить новую, потому что мне нужна прежняя информация об этой записи. Я ценю, если кто-нибудь поможет мне, как я могу это исправить.

...