2016-06-16 39 views
1

我在HouseHoldsInvites之間有一對多的關係。一個HouseHold到很多Invites。我想在邀請發送後的7天后從表格中刪除邀請。我沒有收到錯誤,但過期的邀請仍在表格中。我早些時候嘗試過RemoveAll(),但沒有運氣。我是新來的,不知道另一種方法嘗試,有什麼建議嗎?RemoveAll()和Remove()不能在一對多的關係上工作

var dt = DateTime.Now; 
var hh = db.HouseHolds.Find(id); 
var invList = hh.Invites.ToList(); 
foreach (var i in invList) 
{ 
    if (DateTime.Compare(i.InviteDate.Date.AddDays(7).Date, dt) < 0) 
     hh.Invites.Remove(i); 
} 
+0

你叫'從SaveChanges'方法你之後的情況? – octavioccl

+0

@octavioccl我早些時候使用它,現在註釋掉 – newbieDeveloper

+0

但是如果你想在數據庫上保存這些變化,你需要在最後調用這個方法 – octavioccl

回答

1

由於FK屬性是不可爲空在Invite表,你不能只是刪除的關係叫從Invites導航的財產,問題Remove方法是這些實體將是手術後的孤兒。解決這個問題的一個選擇是壓倒一切的SaveChanges方法:

public override int SaveChanges() 
{ 
    Invites 
     .Local 
     .Where(r => r.HouseHold== null) 
     .ToList() 
     .ForEach(r => Invites.Remove(r)); 

    return base.SaveChanges(); 
} 

或者你也可以在你的週期改變這些實體的狀態爲Deleted

foreach (var i in invList) 
{ 
    if (DateTime.Compare(i.InviteDate.Date.AddDays(7).Date, dt) < 0) 
    { 
    hh.Invites.Remove(i); 
    db.Entry(i).State = EntityState.Deleted; 
    } 
} 
+0

工作正常!非常感謝@octavioccl和@D Stanley – newbieDeveloper

+0

不用客氣;) – octavioccl