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

本文关键字:单元 删除 工作 实体 框架 | 更新日期: 2023-09-27 18:27:12

我正试图从他们以前的班级中获得学生科目列表,并首先将其删除,以便在将学生提升到下一个班级时,我会获得班级科目,然后将其添加到该学生中,但我所用的所有方法都不适用。

这是学生型号

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计数为0,这就是为什么它不能删除它,因为Subject属性中没有任何内容。请在获取学生Id时如何包含Subject。

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

我想你错过了之类的东西

UnitOfWork。更新(学生);

然后你会做

UnitOfWork.Commit();

更新方法会将学生附加到你的ORM上,或者对它做任何你需要做的事情