[英]EF: Deleting object with bridge table
我試圖跟蹤出勤率和學生人數。 為此,我使用了橋表。 學生有一個PersonAttendances的ICollection(bridgetable和bridgeclass),而Attendance也有一個PersonAttendances的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);
}
首先,您需要從數據庫中讀取所需的對象,然后嘗試將其刪除。
如果您有一個用於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();
如果PersonAttendance
的主鍵是使用PersonId
和AttendanceId
的組合鍵,則可以通過附加一個具有PK屬性集的對象,然后將實體狀態設置為PersonAttendance
來避免加載該實體:
var theCondemned = new PersonAttendance()
{
PersonId = person.PersonId,
AttendanceId = this.AttendanceId,
};
PersonAttendances.Attach( theCondemned )
.State = EntityState.Deleted;
否則@rad是正確的-您必須首先從數據庫加載實體(以獲取PK),然后再將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.