Вставьте много значений, используя внешний ключ

1

У меня есть две таблицы Изображение 174551

questionId - это внешний ключ идентификатора вопросов.

Я пытаюсь сохранить 4 ответа в таблице "Ответы". Заголовок - это вопрос, и у него должно быть 4 ответа.

Изображение 174551

Как я могу вставить 4 ответа, который связан с внешним ключом?

Я пробовал это:

QuizEntities quiz = new QuizEntities();
Question question = new Question();
Answer answer = new Answer();

question.Title = titleBox.Text;
question.ImageURL = "../Uploads/" + PhotoBox.Text;


 answer.Answer1 = firstAnswer.Text;
 answer.Answer1 = secondAnswer.Text;
 answer.Answer1 = thirdAnswer.Text;
 answer.Answer1 = fourthAnswer.Text;
 answer.questionId = question.Id;
 if (firstCheckBox.Checked)
 {
   answer.IsCorrect = true;
 }
 else
 {
   answer.IsCorrect = false;
 }

 quiz.Questions.Add(question);
 quiz.Answers.Add(answer);
 quiz.SaveChanges();

но используя это, я могу вставить только одно значение. Как я могу это решить?

  • 0
    Где ваш запрос?
  • 0
    @Raptor Я написал все, что я пытался. Если вы знаете, как это сделать, скажите мне словами, и я постараюсь написать это ... Я не могу догадаться, как это сделать. Спасибо
Показать ещё 5 комментариев
Теги:
linq
entity-framework

2 ответа

2
Лучший ответ

Если вы хотите добавить ровно четыре значения, вам нужно создать четыре объекта " Answer и для каждого из них назначьте правильный идентификатор вопроса.

Не тестируя это с помощью компилятора, я думаю, что вы ищете что-то вроде этого;

QuizEntities quiz = new QuizEntities();
Question question = new Question();
Answer answer = new Answer();

question.Title = titleBox.Text;
question.ImageURL = "../Uploads/" + PhotoBox.Text;
 quiz.Questions.Add(question);

//Add first answer.
 answer.Answer = firstAnswer.Text;
 if (firstCheckBox.Checked)
 {
   answer.IsCorrect = true;
 }
 else
 {
   answer.IsCorrect = false;
 }

 answer.questionId = question.Id;
 quiz.Answers.Add(answer);

//Add second answer.
answer = new Answer();
 answer.Answer = secondAnswer.Text;
 if (secondCheckBox.Checked)
 {
   answer.IsCorrect = true;
 }
 else
 {
   answer.IsCorrect = false;
 }

 answer.questionId = question.Id;
 quiz.Answers.Add(answer);


//... add third and fourth as well.
 quiz.SaveChanges();
  • 0
    это работает спасибо
  • 0
    Чтобы получить более приятный на вид код, я бы пошел за ответом Юлиама.
3

Просто создайте четыре ответа и вставьте их все, вы можете создать функцию, чтобы сделать код более читаемым.

private static Answer CreateAnswer (
    int id, string answer, bool isCorrect, int questionId)
{    
    var answer = new Answer
    {
        Id = id,
        Answer = answer,
        IsCorrect = isCorrect,
        questionId = questionId
    };
    return answer;
}

Затем добавьте вопрос для ответов, назначив временный ключ.

using (var quiz = new QuizEntities())
{
    var qId = 1;
    var question = new Question
    {
        Id = qId,
        title = titleBox.Text,
        ImageURL = "../Uploads/" + PhotoBox.Text
    };

    quiz.Questions.Add(question);
    quiz.Answers.Add(
        CreateAnswer(1, firstAnswer.Text, (bool)firstCheckBox.Checked, qId));
    quiz.Answers.Add(
        CreateAnswer(2, secondAnswer.Text, (bool)secondCheckBox.Checked, qId));
    quiz.Answers.Add(
        CreateAnswer(3, thirdAnswer.Text, (bool)thirdCheckBox.Checked, qId));
    quiz.Answers.Add(
        CreateAnswer(4, fourthAnswer.Text, (bool)fourthCheckBox.Checked, qId));
    quiz.SaveChanges();
}

Советы:

  • Оберните контекст с помощью, чтобы убедиться, что он правильно расположен.
  • Временный ключ может использоваться для создания взаимосвязи между принципалом и зависимым до того, как объекты будут вставлены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню