使用实体框架和工作单元删除多对多
本文关键字:单元 删除 工作 实体 框架 | 更新日期: 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上,或者对它做任何你需要做的事情