使用实体框架和工作单元删除多对多

时间:2014-10-20 09:49:59

标签: c# asp.net-mvc

我正在尝试从他们以前的课程中获取学生科目列表并首先删除它们,以便在将学生升级到下一堂课时,我将获得课程科目,然后将其添加到该学生,但所有方法我没有为我工作。

这是学生模型

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在服务中获取学生以及所有属性时,主题计数为0,这就是为什么它不能删除它因为主题内没有任何东西我怎么能请在获得学生时包括主题。

1 个答案:

答案 0 :(得分:0)

我认为你错过了像

这样的东西

UnitOfWork.Update(学生);

然后你会做

UnitOfWork.Commit();

更新方法会将学生附加到您的ORM,或做任何您需要做的事情