2014-10-20 68 views
0

我試圖從他們的前一個班級中獲取學生主題列表,並先將其刪除,以便在將學生提升到下一個班級時,我將獲得班級科目,然後將它們添加到該學生,但我擁有的所有方法都不適合我。使用實體框架和工作單元刪除多對多

這是學生模型

public class Student 
{ 
    public Student() 
    { 
     Subjects = new Collection<Subject>(); 
    } 
    // ... 
    public virtual ICollection<Subject> Subjects { get; set; } 
} 

這是張貼在行動

[HttpPost] 
public ActionResult Promot_Primary(int[] ChkBx, int AliasId) 
{ 
    if (ModelState.IsValid) 
    { 
     foreach (var id in ChkBx) 
     { 
      // this is where am getting all the former class subjects 
      var subjectIds = _courseService.GetAllStudentSubject(id) 
              .Select(x => x.Id); 
      foreach (var item in subjectIds) 
      { 
       _studentService.RemoveSubject(item, id); 
      } 
     } 
     ViewBag.message = true; 
    } 
} 

這裏的控制器不響應

public void RemoveSubject(int subjectId, int studentId) 
{ 
    var student = UnitOfWork.Student.GetById(studentId); 
    var subject = UnitOfWork.Subject.GetById(subjectId); 

    if (subject == null) 
    { 
     return; 
    } 

    student.Subjects.Remove(subject); 
    UnitOfWork.Commit(); 
} 

檢查服務是否有是我缺少的任何東西,不允許它迴應刪除... 添加工作完美,但刪除不是。

我剛剛發現,當通過服務中的Id獲取學生以及所有屬性時,Subject count是0,這就是爲什麼它不能刪除它,因爲主題屬性裏面沒有任何東西我怎麼能包括主題請按學生提供身份證。

+0

做你知道在哪個階段它不工作?如果您單步執行RemoveSubject方法,請檢查以下內容。學生是否正確返回?如果是這樣,它的主題集合設置是否正確?主體是否被退回? – 2014-10-20 10:36:45

+0

是的,當使用中斷點逐行檢查時,主題會正確返回到列表中。我發現當它碰到student.subject.remove(主題) – user3811481 2014-10-20 10:51:32

+0

時發生錯誤我剛發現當獲取學生通過服務中的Id以及所有屬性,Subject count爲0,這就是爲什麼它不能刪除它,因爲主題屬性內沒有任何內容 如何在包含Id的學生請包括主題。 – user3811481 2014-10-22 07:59:16

回答

0

我覺得你缺少像

UnitOfWork.Update(student);

然後你會做

UnitOfWork.Commit();

的更新方法將學生連接到你的ORM,或做任何你需要它