2015-08-20 101 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