我正在努力跟踪出勤率和学生人数。为此,我使用了桥表。学生有一个PersonAttendances的ICollection(bridgetable和bridgeclass),而Attendance也有一个PersonCollection的ICollection。
某人在某个日期(出勤属性)上课时,在出勤类中,addStudent方法被调用
public void AddPerson(Person person) {
PersonAttendance personAttendance = new PersonAttendance {
Person = person, Attendance = this,
AttendanceId = this.AttendanceId,
PersonId = person.PersonId
};
PersonAttendances.Add(personAttendance);
}
到目前为止,这似乎可行,但是我正在努力了解如何编写删除方法,以删除学生与其出勤之间的“链接”。
我们小组中的某个人提出了这个建议,但是我们肯定这是行不通的,但这是我们可以提出的最好的建议
public void DeletePersoon(Person person) {
PersonAttendance personAttendance = new PersonAttendance {
Person = person,
Attendance = this,
AttendanceId = this.AttendanceId,
PersonId = person.PersonId
};
PersonAttendance.Remove(personAttendance);
}
答案 0 :(得分:1)
首先,您需要从数据库中读取所需的对象,然后尝试将其删除。
如果您拥有PersonAttendance
的实体(显然是您的情况):
var pa = db.PersonAttendance.Where(p => p.PersonId == 1 && p.AttendenceId == 5).FirstOrDefault();
db.PersonAttendance.Remove(pa);
db.SaveChanges();
否则:
var att = db.Attendance.Where(a => a.Id == 5).FirstOrDefault();
person.Attendence.Remove(att)
db.SaveChanges();
答案 1 :(得分:0)
如果PersonAttendance
的主键是使用PersonId
和AttendanceId
的复合键,则可以通过在对象上附加PK属性集,然后再设置要删除的实体状态:
var theCondemned = new PersonAttendance()
{
PersonId = person.PersonId,
AttendanceId = this.AttendanceId,
};
PersonAttendances.Attach( theCondemned )
.State = EntityState.Deleted;
否则@rad是正确的-您必须首先从数据库加载实体(以获取PK),然后再将其删除。