Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 播种多对多数据_C#_Asp.net Mvc_Entity Framework_Code First_Seeding - Fatal编程技术网

C# 播种多对多数据

C# 播种多对多数据,c#,asp.net-mvc,entity-framework,code-first,seeding,C#,Asp.net Mvc,Entity Framework,Code First,Seeding,您好,我正在尝试为我的项目创建一些种子,但是我无法将多对多关系数据种子化到数据库中 我的数据库如下所示: 在TeacherSkills中,教师ID和技能ID是其课程表的外键 我的播种机看起来像这样 protected override void Seed(Ability_Examen_ASP.Models.AbilityDbContext context) { if (!context.Skills.Any()) { contex

您好,我正在尝试为我的项目创建一些种子,但是我无法将多对多关系数据种子化到数据库中

我的数据库如下所示:

在TeacherSkills中,教师ID和技能ID是其课程表的外键

我的播种机看起来像这样

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 = "Joris.Hens@"
            });
            context.Teachers.Add(new Models.Teacher
            {
                FirstName = "Anne",
                LastName = "Van Goetem",
                Campus = "Kruidtuin",
                Password = "testpass",
                Email = "Anne.Vangoetem@"
            });
            context.Teachers.Add(new Models.Teacher
            {
                FirstName = "Sofie",
                LastName = "Krekels",
                Campus = "De Ham",
                Password = "testpass",
                Email = "Sofie.Krekels@"
            });
            context.Teachers.Add(new Models.Teacher
            {
                FirstName = "Robby",
                LastName = "Vanelderen",
                Campus = "De Vest",
                Password = "testpass",
                Email = "Robby.Vanelderen@"
            });
        }

        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,
            });
        }

    }
老师和技能播种没有任何问题,但我不能播种任何技能给老师

它没有给我任何错误,我也不确定出了什么问题


我希望你们中的任何人都能帮忙,谢谢

你看起来像是在假设身份证。如果将它们作为数据库中的标识列,这可能不是一个好的举措

对于标识键,您应该调用context.SaveChanges()来写入数据库并获取ID。然后应该使用对象中的值,而不是硬编码ID值

将呼叫添加到

context.SaveChanges();  
在你填充老师的地方和你将在哪里播种老师的技能之间。这应该提交技能和教师集合,以便在执行插入时,您对关键列(标识值)的假设将被实际生成的假设所取代


此外,可以在TeacherSkills构造函数中检索并使用实际教师和技能的ID值,以消除种子代码中的“幻数”1-4。

我假设您在技能实体上具有如下导航属性

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 = "Joris.Hens@thomasmore.be"}} },

     );

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

        context.SaveChanges();

      }
}
公开课技能{
公共字符串SkillName{get;set;}
公共虚拟IList教师{get;set;}
}
受保护的覆盖无效种子(能力\u Examen\u ASP.Models.AbilityDbContext上下文){
如果(!context.Skills.Any())
{
如果(!context.Skills.Any()&&!context.Teachers.Any()){
context.Skills.Add(newmodels.SkillName=“PHP”,Teachers=newlist{new Teacher{FirstName=“Joris”,
LastName=“母鸡”,
校园=“Kruidtuin”,
Password=“testpass”,
Email=“乔里斯。Hens@thomasmore.be"}} },
);
//重复其他技能,然后列出教师名单
}
SaveChanges();
}
}

有效问题-我的结论是,他的代码中没有明确的ID设置。非常感谢您的回答,这是一个简单的解决方案!