2016-01-06 77 views
3

你好,我正在嘗試爲我的項目創建一些種子,但是我無法將多對多關係數據種到種子數據庫。種子多對多數據

數據庫看起來是這樣的:

enter image description here

TeacherSkillsTeacher_IDskill_id也外鍵所在表ofcourse。

播種機看起來沒有任何問題,這

protected override void Seed(Ability_Examen_ASP.Models.AbilityDbContext context) 
    { 
     if (!context.Skills.Any()) 
     { 
      context.Skills.Add(new Models.Skill { SkillName = "PHP" }); 
      context.Skills.Add(new Models.Skill { SkillName = "Java" }); 
      context.Skills.Add(new Models.Skill { SkillName = "Frans" }); 
      context.Skills.Add(new Models.Skill { SkillName = "Drupal" }); 
     } 

     if (!context.Teachers.Any()) 
     { 
      context.Teachers.Add(new Models.Teacher 
      { 
       FirstName = "Joris", 
       LastName = "Hens", 
       Campus = "Kruidtuin", 
       Password = "testpass", 
       Email = "[email protected]" 
      }); 
      context.Teachers.Add(new Models.Teacher 
      { 
       FirstName = "Anne", 
       LastName = "Van Goetem", 
       Campus = "Kruidtuin", 
       Password = "testpass", 
       Email = "[email protected]" 
      }); 
      context.Teachers.Add(new Models.Teacher 
      { 
       FirstName = "Sofie", 
       LastName = "Krekels", 
       Campus = "De Ham", 
       Password = "testpass", 
       Email = "[email protected]" 
      }); 
      context.Teachers.Add(new Models.Teacher 
      { 
       FirstName = "Robby", 
       LastName = "Vanelderen", 
       Campus = "De Vest", 
       Password = "testpass", 
       Email = "[email protected]" 
      }); 
     } 

     if (!context.TeacherSkills.Any()) 
     { 
      context.TeacherSkills.Add(new Models.TeacherSkill 
      { 
       Teacher_ID = 1, 
       Skill_ID = 1, 
      }); 
      context.TeacherSkills.Add(new Models.TeacherSkill 
      { 
       Teacher_ID = 1, 
       Skill_ID = 4, 
      }); 
      context.TeacherSkills.Add(new Models.TeacherSkill 
      { 
       Teacher_ID = 2, 
       Skill_ID = 2, 
      }); 
      context.TeacherSkills.Add(new Models.TeacherSkill 
      { 
       Teacher_ID = 3, 
       Skill_ID = 3, 
      }); 
      context.TeacherSkills.Add(new Models.TeacherSkill 
      { 
       Teacher_ID = 4, 
       Skill_ID = 4, 
      }); 
     } 

    } 

老師和技能的種子,但我不能種子任何技能的教師。

它不會給我任何錯誤,我不知道是什麼錯誤。

希望你們能幫忙,謝謝!

回答

2

通話添加到

context.SaveChanges(); 

,你填補了老師和你要去哪裏種子的teacherskills之間。這應該提交技能和教師集合,以便您對關鍵列(身份值)的假設將被INSERT執行時實際生成的假設取代。

此外,可以在TeacherSkills構造函數中檢索並使用實際的教師和技能ID值,以消除種子代碼中的「幻數」1-4。

+0

非常感謝您的回覆,這是一個簡單的修復! – Nicolas

2

你看起來像你正在假設的ID。如果您將它們作爲數據庫中的標識列,那可能不是一個好的舉措。

使用標識鍵,您應該調用context.SaveChanges()來寫入數據庫並獲取標識的返回值。然後,您應該使用對象中的值而不是硬編碼ID值。

+0

有效的問題 - 我的結論是,從一個事實,即有ID的在他的代碼沒有顯式設置。 –

0

我假設你有技能的實體導航屬性如下

public class Skill{ 
public string SkillName{get; set;} 
public virtual IList<Teacher> Teachers{get;set;} 
} 


protected override void Seed(Ability_Examen_ASP.Models.AbilityDbContext context){ 
if (!context.Skills.Any()) 
    { 


     if(!context.Skills.Any() && !context.Teachers.Any()){ 
      context.Skills.Add(new Models.Skill{ SkillName = "PHP", Teachers = new List<Teacher>{new Teacher{FirstName = "Joris", 
      LastName = "Hens", 
      Campus = "Kruidtuin", 
      Password = "testpass", 
      Email = "Jori[email protected]"}} }, 

    ); 

// repeat for other skills followed by list of teachers 
      } 

     context.SaveChanges(); 

     } 
}