У меня есть две модели: сцена и викториныя не могу добавить новый объект в базу данных
public class Stage
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid StageId { get; set; }
(...)
public virtual Quiz Quiz { get; set; }
}
public class Quiz
{
[Key, ForeignKey("Stage")]
public Guid StageId { get; set; }
public virtual List<Question> Questions { get; set; }
public virtual List<ApplicationUser> Users { get; set; }
public virtual Stage Stage { get; set; }
public Quiz()
{
Questions = new List<Question>();
Users = new List<ApplicationUser>();
}
}
и Создать метод:
public Guid Create(NewQuizViewModel quizToCreate)
{
Stage currentStage = _stageService.GetStageById(quizToCreate.StageId);
List<Question> newQuestions = new List<Question>();
foreach (var question in quizToCreate.Questions)
{
Question newQuestion = new Question();
newQuestion.QuestionId = Guid.NewGuid();
newQuestion.QuestionContent = question.QuestionContent;
newQuestion.Answers = question.Answers;
newQuestion.CorrectAnswer = question.CorrectAnswer;
newQuestions.Add(newQuestion);
}
Quiz quizToDatabase = new Quiz()
{
Questions = newQuestions,
Stage = currentStage,
};
_dbContext.Quizzes.Add(quizToDatabase);
_dbContext.SaveChanges();
return quizToDatabase.StageId;
}
Можете ли вы сказать мне, что случилось с кодом? Я не могу добавить Quiz в базу данных, StageId пуст. У меня есть ошибка в строке
_dbContext.Quizzes.Add(quizToDatabase);
Скриншот: Adding to database
В Seed метод все в порядке.
var quizzes = new List<Quiz>()
{
new Quiz()
{
Questions = new List<Question>()
{
new Question()
{
QuestionContent = "Just mark 1st",
Answers = new List<string>(4)
{
"First", "Second", "Third", "Fourth"
},
CorrectAnswer = CorrectAnswer.FirstAnswer
},
new Question()
{
QuestionContent = "Just mark 3rd",
Answers = new List<string>(4)
{
"First", "Second", "Third", "Fourth"
},
CorrectAnswer = CorrectAnswer.ThirdAnswer
},
new Question()
{
QuestionContent = "Just mark 4th",
Answers = new List<string>(4)
{
"First", "Second", "Third", "Fourth"
},
CorrectAnswer = CorrectAnswer.FourthAnswer
}
},
Stage = context.Stages.FirstOrDefault(c => c.Name=="Stage Example")
}
};
quizzes.ForEach(c => context.Quizzes.Add(c));
context.SaveChanges();
Я не вижу разницы. Спасибо за помощь.
Есть ли «Stage currentStage = _stageService.GetStageById (quizToCreate.StageId);' найти сцену? – user1429080
Да, даже в изображении объекта quizToDatabase имеет этап, но не StageId – Dre
Какая ошибка? Выполните полное исключение (включая стек вызовов) в * вопросе *. Вы можете получить его с помощью 'Exception.ToString()' –