如何首先使用代码来建立关系

时间:2013-08-20 16:49:49

标签: entity-framework code-first seeding

在我的模型中,一个问题可以有很多有效的答案,答案可以用在很多问题上。我在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()时会尝试另一个插入,以获得带有文本“None”的答案。 *无法在对象'dbo.Answers'中插入具有唯一索引'IX_NaturalKey'*的重复键行。重复键值为(None)。“为什么在将现有对象添加到关系中并尝试阻止它时会尝试第二次插入?

1 个答案:

答案 0 :(得分: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 },
                    }
                });