2016-12-05 2 views
0

У меня есть две модели: сцена и викториныя не могу добавить новый объект в базу данных

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

Я не вижу разницы. Спасибо за помощь.

+0

Есть ли «Stage currentStage = _stageService.GetStageById (quizToCreate.StageId);' найти сцену? – user1429080

+0

Да, даже в изображении объекта quizToDatabase имеет этап, но не StageId – Dre

+2

Какая ошибка? Выполните полное исключение (включая стек вызовов) в * вопросе *. Вы можете получить его с помощью 'Exception.ToString()' –

ответ

0

Я думаю, это потому, что вы получаете «currentStage» из «_stageService» (первый dbcontext!) И SaveChanges на «_dbContext» (второй dbcontext). Вы не можете смешивать dbContext ...

Смежные вопросы