如何在没有子项时删除父项?

时间:2014-05-15 18:09:19

标签: c# entity-framework relationship

在我的应用程序中,我有一个多关系,它映射" 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

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();
}