breezejs的解决方法不支持级联删除?

时间:2013-07-24 19:24:58

标签: entity-framework breeze cascade cascading-deletes

直到我发现breezejs不支持从link进行级联删除,这让我头痛不已。我尝试通过直接向数据库表添加级联删除约束来解决此限制。但是,它似乎也不适用于微风(如果我手动删除父行,它可以工作)。根据我的观察,当breeze删除父行时,它将子项的外键设置为null。有什么想法吗?

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

1 个答案:

答案 0 :(得分:1)

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

假设我有一个父类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的删除写下这个。另外,请记住,如果您将类Toy放在父类Child中,您也必须手动处理该类。{/ p>