2014-09-04 65 views
1

插入许多价值,我有两个表 enter image description here使用外键

questionId是问题的id的外键。

我正试图在“答案”表中保存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 2014-09-04 10:33:05

+0

@Raptor我已经写了所有我试过的东西。如果你知道如何做到这一点,用言语告诉我,我会尽力写这篇文章..我无法猜测如何做到这一点。谢谢 – gsiradze 2014-09-04 10:37:19

+0

设置'IsCorrect'属性后有没有更多的代码,比如'SaveChanges'? – 2014-09-04 10:40:49

回答

2

如果您想要正好添加四个值,则需要创建四个Answer对象,并为每个对象分配正确的问题ID。如果不用编译器测试这个,我想你正在寻找类似这样的东西;

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 2014-09-04 11:08:13

+0

为了获得更好看的代码我会去Yuliam的答案。 – Sander 2014-09-04 11:50:39

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

提示:

  • 裹使用,以确保它的正确配置的上下文。
  • 在插入实体之前,临时密钥可用于在主体和从属之间创建关系。