2014-10-20 70 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,或做任何你需要它