Я реализую 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. Для этого я написал как приведенный выше код, но после запуска проекта, он показывает мне ошибку, которая вот-вот не принимает существующую запись кандидата, а просто ссылается на другую таблицу. В моей методологии я не могу удалить соответствующую запись в заявителе и снова вставить новую, потому что мне нужна прежняя информация об этой записи. Я ценю, если кто-нибудь поможет мне, как я могу это исправить.