Как обновить отношение «многие ко многим», которое имеет дополнительные поля к своим внешним ключам - PullRequest
0 голосов
/ 31 января 2020

Я реализую проект, используя ядро ​​asp. net. Используя первый подход к БД и создавая модели в Visual studio, на сервере SQl у меня есть две таблицы, называемые API и Applicant, которые имеют отношения многие ко многим, а также есть их таблица соединений, называемая ApiApplicant. Предположим, что у этих трех таблиц есть следующие поля: Api: ID, имя, дата. Заявитель: Id, имя, тип ApiAppliant: Id, ApiID, ApplicantId, reqDate, gateId. Моя таблица ApiApplicant также имеет отношение многие к одному с другой таблицей, называемой Gate. Таблица Gate имеет следующие поля: Id, name, Теперь я хочу знать, как я могу обновить таблицу ApiApplicant в своем коде. Я буду признателен, если кто-нибудь решит вышеуказанную проблему, показав мне пример кода linq.

1 Ответ

0 голосов
/ 04 февраля 2020

Непонятно, как вы хотите обновить таблицу соединений. Вы не показываете никакого кода.

Anyany, вы можете сначала удалить все исходные записи, которые вы хотите обновить, а затем добавить новые записи.

Ниже приведена демонстрация, которая обновляет информацию о существующих заявителях Api.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(long id, Api api)
{
    if (id != api.ID)
    {
        return NotFound();
    }

    if (ModelState.IsValid)
    {
        try
        {
           //your new ApplicantIds
            var newSelectedApplicantIds = new int[] { 3,4 };
            var apiApplicants = new List<ApiApplicant>();


            var apiAppList = await _context.ApiApplicant.Where(a => a.ApiID == api.Id).ToListAsync() ;
            _context.RemoveRange(apiAppList);

            foreach (var newid in newSelectedApplicantIds)
            {
                var item = new ApiApplicant()
                {
                    ApiID = api.Id,
                    ApplicantId = newid,
                };
                apiApplicants.Add(item);
            }
            _context.AddRange(apiApplicants);
            _context.Update(api);

            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {

        }
        return RedirectToAction(nameof(Index));
    }
    return View(api);
}
...