直到我发现breezejs不支持从link进行级联删除,这让我头痛不已。我尝试通过直接向数据库表添加级联删除约束来解决此限制。但是,它似乎也不适用于微风(如果我手动删除父行,它可以工作)。根据我的观察,当breeze删除父行时,它将子项的外键设置为null。有什么想法吗?
顺便说一句,为了避免breeze在删除时抛出异常,我不得不使外键可以为空。我还必须关闭实体框架上的级联删除。
答案 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>