这让我很头疼,直到我从这个链接中发现微风js 还不支持级联删除。我试图通过直接向数据库表添加级联删除约束来解决此限制。但是,它似乎也不适用于微风(如果我手动删除父行,它会起作用)。根据我的观察,当微风删除父行时,它将子行的外键设置为空。任何想法?
顺便说一句,为了避免删除时微风抛出异常,我必须使外键可以为空。我还必须关闭实体框架上的级联删除。
这让我很头疼,直到我从这个链接中发现微风js 还不支持级联删除。我试图通过直接向数据库表添加级联删除约束来解决此限制。但是,它似乎也不适用于微风(如果我手动删除父行,它会起作用)。根据我的观察,当微风删除父行时,它将子行的外键设置为空。任何想法?
顺便说一句,为了避免删除时微风抛出异常,我必须使外键可以为空。我还必须关闭实体框架上的级联删除。
我知道这个问题已经有几个月的历史了,但是我在寻找解决方案时偶然发现了这个问题太多次,所以它可能会对某人有所帮助。这是我设法完成的解决方法(没有经过彻底测试,但它适用于最初的几个测试)。
假设我有一个父类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
,则您也必须手动解决该问题。