1

这让我很头疼,直到我从这个链接中发现微风js 还不支持级联删除。我试图通过直接向数据库表添加级联删除约束来解决此限制。但是,它似乎也不适用于微风(如果我手动删除父行,它会起作用)。根据我的观察,当微风删除父行时,它将子行的外键设置为空。任何想法?

顺便说一句,为了避免删除时微风抛出异常,我必须使外键可以为空。我还必须关闭实体框架上的级联删除。

4

1 回答 1

1

我知道这个问题已经有几个月的历史了,但是我在寻找解决方案时偶然发现了这个问题太多次,所以它可能会对某人有所帮助。这是我设法完成的解决方法(没有经过彻底测试,但它适用于最初的几个测试)。

假设我有一个父类Parent和一个子类Child。只有在 Parent 存在时,Child 才能存在。

在 Context 类(放置protected override void OnModelCreating(DbModelBuilder modelBuilder)函数的类)中,您编写以下内容:

public override int SaveChanges(){
  foreach (var entry in this.ChangeTracker.Entries().Where((e => (e.State == (EntityState)Breeze.WebApi.EntityState.Deleted))))
    {
      if (entry.EntityType.GetType() == typeof(Parent)){
        var entity = entry.Entity as Parent;
        var allChildren = Children.Where(p => p.ParentId == entity.Id);
        foreach (var singleChild in allChildren){
          Children.Remove(singleChild);
        }
      }
    }
  }
  return base.SaveChanges();
}

缺点是 - 您需要为通常会发生 Cascade 的每个单独删除编写此内容。另外,请记住,如果您将 classToy设置为具有 parent class Child,则您也必须手动解决该问题。

于 2013-11-15T15:35:30.533 回答