2015-11-13 44 views
0

我試圖編輯學生不再選擇的科目。這是我的數據庫看起來像:用 enter image description here刪除不再選擇的科目

editStudent查詢我選擇被編輯項目和使用studentSubject我檢索從數據庫對象。

var editStudent = (from st in _db.Students 
            where st.Id == student.Id 
            select new Students 
            { 
             Id = student.Id, 
             Name = student.Name, 
             Surname = student.Surname, 
             BirthDate = student.BirthDate, 
             Gender = student.Gender, 
             Subject = (from q in student.Subject 
               select q).ToList() 
            }).FirstOrDefault(); 

var studentSubjects = (from q in _db.Subjects 
             where q.StudentId == student.Id 
             select q.Name).ToList(); 

如何刪除未被選中的主題? (他們不會長期處於從第一次查詢主題列表)

例如:

以dB爲2科目數學和英語以及用戶改變了這些,現在他 只有數學。第一個查詢將返回列表中只有數學和第二 將返回數學和英語

回答

0

可以方便地選擇不使用對象與

var subjectsNotUsed = _db.Subjects.Where(subject => subject.StudentId == null); 

然後(如果您正在使用實體框架6)你可以使用.RemoveRange()這樣:

_db.Subjects.RemoveRange(subjectsNotUsed); 
_db.SaveChanges(); 

如果使用EF的低版本,你需要一個刪除一個:

foreach (var subject in notUsedSubjects) 
{ 
    _db.Subjects.DeleteObject(subject); 
} 
_db.SaveChanges(); 

但我認爲你應該改變數據庫模式。學生不應與主題相關。您應該使用表學生只是爲了學生的信息,而學科只適用於科目。三表(基本M:N的關係),你將代表學生具有一定的主題,這樣的:

DB Diagram

這使您在數據庫中只有一次存儲每個主題和學生。