Я пытаюсь вставить данные из веб-формы ASP.NET в базу данных. Но я получаю ошибку внешнего ключа

Я пытаюсь создать систему управления студентами, используя веб-формы ASP.NET и базу данных. Я связал базу данных с моим проектом, используя Entity Framework.

Но после того, как я нажал кнопку «Отправить», я получаю ошибку внешнего ключа.

Вот мой код и диаграмма базы данных:

public void btnAddStudent_Click(object sender, EventArgs e)
{
    var db = new STUDENT_MANAGEEntities();

    var tb = new Student_Info();

    tb.Student_Id = Convert.ToInt32(txtStudentId.Text.Trim());
    tb.Name = txtName.Text.Trim();
    tb.Semester_Id = Convert.ToInt32(dpdSemester.SelectedIndex);
    tb.Session = txtSession.Text.Trim();
    tb.Department_Id = Convert.ToInt32(dpdDepartment.SelectedIndex);
    tb.Shift_Id = Convert.ToInt32(dpdShift.SelectedIndex);
    tb.Gender_Id = Convert.ToInt32(dpdGender.SelectedIndex);
    tb.Blood_Id = Convert.ToInt32(dpdBlood.SelectedIndex);
    tb.Birth_Date = clrBirthDate.SelectedDate;
    tb.Contact = txtContact.Text.Trim();
    tb.Address = txtAddress.Text.Trim();

    db.AddToStudent_Info(tb);
    db.SaveChanges();
}

Диаграмма базы данных

И это ошибка, которую я получаю:

Когда у вас есть ключ fpreign между двумя таблицами, как у вас, тогда идентификатор крови должен существовать до вставки учащегося, обычно вы выбираете тип крови из поля со списком, чтобы вы вводили только существующие значения, и ошибка не возникнет

nbk 20.11.2022 19:50

Можете ли вы привести пример, пожалуйста?

Abdullah Al Mahmud Khan 20.11.2022 19:57

Это показывает, что я верю в то, что имею в виду stackoverflow.com/questions/32390577/…

nbk 20.11.2022 20:02

Предполагая, что столбец tb.Blood_Id ссылается на dbo.Blood_Info через это ограничение внешнего ключа — проверьте, какое значение вы пытаетесь вставить для Blood_Id — существует ли это значение в таблице Blood_Info?? Кажется, вы просто пытаетесь вставить значение, которого нет в ссылочной таблице.

marc_s 20.11.2022 20:14

Я пробовал это. Но этот код показывает в раскрывающемся списке только идентификатор. Но я хочу показать имя как «1-я смена» для значения идентификатора 1; «2-я смена» для значения идентификатора 2. Надеюсь, вы поймете. @нбк

Abdullah Al Mahmud Khan 20.11.2022 20:25

Ссылочная таблица @marc_s имеет точное значение, которое я хочу вставить. Но хотя это не работает. Можем ли мы общаться через любые социальные сети?

Abdullah Al Mahmud Khan 20.11.2022 20:29

Вам нужен только Bloodtyoeid для вставки в вашу студенческую таблицу, в качестве текста для elenet вы берете значение Text, я думаю, что у вас есть все, что вам нужно, и поэтому у вас никогда не будет идентификатора, который не подходит

nbk 20.11.2022 20:35

Проблема, вероятно, связана с использованием dpdBlood.SelectedIndex для установки tb.Blood_Id. Выбранный индекс — это число, начинающееся с 0, которое указывает, какой элемент в раскрывающемся списке выбрал пользователь: 0 — первый, 1 — второй и так далее. Этот индекс может не иметь ничего общего с Blood_Id выбранного элемента, поэтому он может не существовать в таблице Blood_Info. Вы смотрели на другие свойства элемента управления списком, такие как SelectedItem и SelectedValue?

AlwaysLearning 20.11.2022 22:20
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
0
8
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы используете SelectedIndex и используете его для FK. SelectedIndex — это просто позиция в списке выбранных элементов, поэтому 0,1,2,3,4,... Значения в раскрывающемся списке, вероятно, имеют разные значения идентификатора, и вы даже можете отсортировать их по имени и т. д. , поэтому идентификаторы могут быть, например, 4,1,2,5,3. Выбор первого элемента в списке может быть идентификатором крови 4, но SelectedIndex будет 0, что не соответствует ни одной записи крови.

Когда вы заполняете свои поля со списком на основе таблиц поиска, вам необходимо связать как текст, так и значение каждого элемента. Значение является ключом для этой записи, т.е. Идентификатор Типа Крови. Тогда я считаю, что SelectedValue должен дать вам эту связанную сумму значения, иначе вам может понадобиться разыграть SelectedItem как SelectListItem и получить его Value:

// try this...
tb.Blood_Id = Convert.ToInt32(dpdBlood.SelectedValue);


// or this...
var selectedItem = (SelectListItem)dpdBlood.SelectedItem;
tb.Blood_Id = Convert.ToInt32(selectedItem.Value);

Это нужно сделать для всех выпадающих списков. В противном случае вы получите ситуации, когда выбранные вами значения не сохраняются в той же записи (где индекс <> идентификатор) или ошибки, когда индекс не соответствует какому-либо идентификатору.

Спасибо всем. Эта ошибка решается с помощью SelectedItem.Value вместо SelectedIndex. Еще раз всем сердечное спасибо.

Abdullah Al Mahmud Khan 21.11.2022 02:24

Другие вопросы по теме