簡體   English   中英

EF:刪除帶有橋表的對象

[英]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的主鍵是使用PersonIdAttendanceId的組合鍵,則可以通過附加一個具有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM