2014-09-04 5 views
1

У меня есть две таблицы enter image description hereВставка многих значений с помощью внешнего ключа

QuestionID является внешним ключом Id на вопросы'S.

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

enter image description here

Как я могу вставить 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

Где ваш запрос? – Raptor

+0

@Raptor Я написал все, что я пробовал. Если вы знаете, как это сделать, расскажите мне слова, и я попытаюсь написать это. Я не могу догадаться, как это сделать. спасибо – gsiradze

+0

есть ли еще код после установки свойства IsCorrect, что-то вроде 'SaveChanges'? –

ответ

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

он работает спасибо – gsiradze

+0

Чтобы получить более красивый код, я бы пошел на ответ Юлиама. – Sander

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(); 
} 

Советы:

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