在我的应用程序中,我有一个多关系,它映射" Slots"反对"广告",以便广告可以添加到多个广告位。
Slot (id, location)
Advert (slot_id, text, url)
但是,当从所有广告位中删除广告时,我也希望将其删除。
我认为执行此操作的最佳方法是向Slot.Advert
setter和Advert.Slots.Remove()
方法添加检查,以便在删除最后一个关系时,可以删除广告;
public class Slot
{
public int Id { get; set; }
public int? AdvertId { get; set; }
private Advert _Advert;
public virtual Advert Advert
{
get
{
return _Advert;
}
set
{
if (_Advert != value && _Advert != null && _Advert.Slots.Count == 1)
{
// How do I delete the _Advert here? I have no access to the context? :(
}
_Advert = value;
}
}
}
但是,从上面可以看出,我还没有得到一个"背景" setter
中的实例,因此我无法删除广告。
虽然我可以打开一个新的上下文,但这样做
有谁知道我有什么选择?我在POCO土地上并使用Entity Framework 6.1
答案 0 :(得分:1)
在您的上下文的SaveChanges
方法中执行此操作。
public override int SaveChanges()
{
foreach (var entry in ChangeTracker.Entries<Advert>().Where(e=>e.Entity.Slots.Count()==0))
{
entry.State = EntityState.Deleted;
}
return base.SaveChanges();
}