我在HouseHolds
和Invites
之间存在一对多的关系。一个HouseHold
到多个Invites
。我希望在发送邀请后7天内从表中删除邀请。我没有收到错误,但过期的邀请仍然在表中。我之前试过RemoveAll()
没有运气。我是新手,不知道另一种尝试的方法,有什么建议吗?
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 :(得分:1)
由于您的Invite
表格中的FK属性不可为空,因此您无法从Remove
导航属性中删除调用Invites
方法的关系。问题是那些在该行动之后,实体将成为孤儿。解决此问题的一个选项是覆盖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;
}
}