2015-08-20 157 views
4

我正在研究我的教程项目我是新来的实体框架。如何在EF多对多关系中添加新记录?

我有许多两个很多的关系表,我使用的代码第一approuch。 enter image description here

下面是表的定义:

class EmployeeDBContext : DbContext 
{ 
    public EmployeeDBContext() : base("DefaultConnection") { } 
    public DbSet<Course> Courses { get; set; } 
    public DbSet<Student> Students { get; set; } 
} 

//================================================My entities================================================= 
public class Student 
{ 
    [Key] 
    public int StudentID { get; set; } 
    public string StudentName { get; set; } 
    public virtual ICollection<Course> Courses { get; set; } 
} 

public class Course 
{ 

    [Key] 
    public int CourseID { get; set; } 
    public string CourseName { get; set; } 
    public virtual ICollection<Student> Students { get; set; } 
} 

充满了3门科目的课程表:历史,数学,物理。

我需要添加新学生并将学生与现有课程相关联。

任何想法如何实现它?

预先感谢您。

+0

有你尝试简单地提取您想要的课程,将它们添加到学生课程集合中,然后保存学生? –

+0

@ eranotzap,不,它似乎退出复杂,我作为新的英孚。 – Michael

+1

下面的答案正是我所解释的。试试看。 更多,花点时间在EntityFramework上观看完整的课程,这将为您节省更多的时间,然后简单地尝试弄清楚如何在旅途中自己写... Pluralsight有一个关于ef的课程,您可以找到轻松的洪流。 –

回答

2

如果你需要创建一个学生,并添加一门课程(或更多的课程),以他EF做到这一点的方式是一样的用文字描述的...

using (var ctx= new EmployeeDBContext()) 
{ 
    // Create a new student (and set some properties) 
    Student student = new Student() 
    { 
     StudentName = "Scott Tiger" 
    }; 

    // Replace courseId with the course id that you need to add to the student 
    student.Courses.Add(ctx.Courses.Find(courseId)); 
    // Add other courses if you need to 

    // Let's write the student to the DB 
    ctx.Students.Add(student); 
    ctx.SaveChanges(); 

} 
2

请尝试下面的代码: 取决于您是否要更新courseName或添加学生列表。

 public void UpdateCourse(string courseName, List<Student> students) 
     { 
      var dbInstance = new EmployeeDBContext(); 
      Course model = (from item in dbInstance.Courses 
          where item.CourseID = courseid 
          select item); 
      model.CourseName = courseName; 
      foreach(var item in students) 
       {  
       var currentStudent = from stud in dbInstance.Students 
         where stud.StudentId == item.StudentId; 
       if(currentStudent != null) 
       currentStudent.Name = item.Name; 
       else 
        dbInstance.Students.Add(new Student() {.StudentId = item.StudentId, .Name = item.Name}); 
      }; 
      dbInstance.SaveChanges(); 
     } 


public void CreateCourse(string courseName, List<Student> students) 
    { 
     var model = new Course(); 
     model.CourseName = courseName; 
     model.Students = students; 
     var dbInstance = new EmployeeDBContext(); 
     dbInstance.Courses.Add(model); 
     dbInstance.SaveChanges(); 
    } 
+0

,我没有课程名称,但我的课程ID已存在于数据库中!那么为什么我必须创建一门新课程? – Michael

+0

对,这是从函数名称创建一个新的课程。 – Muks

+0

@Muks代码是一个示例。如果您已经拥有一门课程,则无需创建新课程。另外,示例创建课程并添加学生,但您也可以创建学生并添加课程。 – bubi