Entity framework 如何首先使用代码为关系设定种子

Entity framework 如何首先使用代码为关系设定种子,entity-framework,code-first,seeding,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 =

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

您可以使用以下方法:

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 },
                    }
                });
context.Question.AddOrUpdate(
p=>p.Id,
新模型。问题
{
问题=“浴室地板”,
//活动=真,
Answers=new System.Collections.Generic.List(){
新答案{Id=1,Text=“地毯”,SortOrder=60},
新答案{Id=2,Text=“地毯”,SortOrder=60},
新答案{Id=3,Text=“地毯”,SortOrder=60},
新答案{Id=4,Text=“地毯”,SortOrder=60},
新答案{Id=5,Text=“地毯”,SortOrder=60},
}
});

我尝试了该代码,效果很好。在插入问答数组时,尝试从上下文中提取“无”答案。可能是因为不知道它在context@sza我使用的是EF6发行版候选版。这可能有一个问题……同时,因为这可能是固定的数据要求我已经决定通过sql语句插入数据,这样我就可以在迁移的Up方法中进行插入,并且我已经暂时解决了问题,答案表中不允许出现重复文本。因此,不允许使用大量不同Id的“地毯式”答案。我想做的是能够添加一个带有文本“无”的答案“作为一个以上问题的有效答案。所以我也可以用Question.Text=“Kitchen Flooding”和Question.Answer=\n这些文本是可以更改的示例。