2013-08-20 21 views
1

在我的模型中,一個問題可以有許多有效答案,並且答案可以用於許多問題。我在Answer.Text屬性上有一個唯一的索引來防止重複並確保驗證有效。我在我的Seed方法中有這個代碼。如何使用代碼優先種子關係

Answer _None = new Answer { Text = "None", SortOrder = 50 }; 
    context.Answers.AddOrUpdate(x => x.Text, _None); 
    context.SaveChanges(); 

    Question q = new Question 
    { 
     Text = "Bathroom flooring", 
     Answers = new Answer[] 
       { 
        _None,  
        new Answer { Text = "Carpet", SortOrder = 60} 
       } 
    } 
    context.Questions.AddOrUpdate(x => x.Text, q); 
    context.SaveChanges(); 

的方法,因爲另一個插件試圖上context.SaveChanges第二次調用()與文本「無」的回答引發錯誤。 *無法在具有唯一索引'IX_NaturalKey'*的對象'dbo.Answers'中插入重複鍵行。重複的鍵值是(無)「爲什麼是第二個插入試圖將現有對象添加到關係,是有辦法,以防止它

+0

我試過了代碼,它運行得很好 – zsong

+0

嘗試從你的上下文中插入_None答案時,插入到你的問題答案數組可能只是一個問題,它不知道它在上下文中 – Thewads

+0

@sza我正在使用EF6候選版本。也許有一個問題...在此期間,因爲這可能是生產中所需的固定數據,所以我決定通過sql語句插入數據,以便我可以插入一種遷移的Up方法,並且我暫時將問題停放在 – Colin

回答

0

你可以使用這樣的事情:?

context.Question.AddOrUpdate(
       p => p.Id, 
       new Models.Question 
       { 
        Question = "Bathroom flooring", 
        //Active = true, 
        Answers = new System.Collections.Generic.List<Answers>(){ 
         new Answers {Id=1, Text = "Carpet",SortOrder=60 }, 
         new Answers {Id=2, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=3, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=4, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=5, Text = "Carpet",SortOrder=60 }, 
        } 
       }); 
+0

答案表中的Duplicate Text是不允許的。因此不允許使用不同ID的「地毯」答案。我想要做的是能夠添加一個帶有「無」字樣的答案作爲對多個問題的有效答案。所以我也可以通過Question.Answer = _None – Colin

+1

這些文字是你可以改變的例子Question.Text =「Kitchen flooring」。 –