2014-04-11 91 views
1

我有三張表學生(studID,fullName,gender ...),註冊(studID,courseID,日期)和課程(courseID,courseName,...)。我使用下面的代碼從studID 001中刪除了Enroll表中的所有記錄,其中大約有三個學生簽名的課程。但是,它只會刪除一條記錄。使用實體框架刪除多對多關係

using(var context = new DBEntities()) 
{  
var _stud = (from s in context.Students where s.studID == "001" select s).FirstOrDefault(); 
       var _course = _stud.Courses.FirstOrDefault(); 
       _course.Students.Remove(_stud); 
context.SaveChanges(); 
} 

我在這裏錯過了什麼?

+0

'_course.Students.Load(); _course.Students.ToList()。ForEach(s => context.Student.DeleteObject(s));'這應該工作。 – Andrew

回答

0

你有沒有嘗試這個代碼:

var student = context.Students.Where(p => p.studID == "001").ToList(); 
foreach (var item in student) 
{ 
    if (student != null) 
    { 
     var course = student.Courses.ToList(); 
     if (course != null) 
     { 
      foreach (var item2 in course) 
      {   
       course.Students.Remove(item2); 
       context.SaveChanges(); 
      } 
     }   
    } 
}  
+0

。包括(p => p.studID)會產生錯誤,除非被「課程」取代。即使如此,它只會刪除一條記錄(列表頂部) – aby

+0

檢查我更新的代碼 –

0

我用下面的代碼刪除登記表

你刪除者登記或學生的所有記錄?

Student student = context.Student.FirstOrDefault(s => s.studID == "001"); 
if (student!=null) 
{ 
    student.Enrolls.Load(); 
    student.Enrolls.ToList().ForEach(e => context.Enroll.DeleteObject(e)); 
} 
5

謝謝你們的協助。下面是我如何解決它:

using (var context = new DBEntities()) 
{ 
    var student = (from s in context.Students where s.studID == "001" select s).FirstOrDefault<Student>();    
    foreach (Course c in student.Courses.ToList()) 
    { 
     student.Courses.Remove(c); 
    } 
    context.SaveChanges(); 
}