この質問は数か月前のものであることは知っていますが、解決策を探しているときにこの質問に何度も出くわしたので、誰かを助けるかもしれません. これは私がうまくやってのけた回避策です(完全にはテストされていませんが、最初のいくつかのテストでは機能します)。
親クラス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();
}
欠点は、カスケードが通常発生するすべての単一の削除に対してこれを記述する必要があることです。また、Toy
親クラスを持つクラスを配置する場合は、そのクラスChild
にも手動で対処する必要があることに注意してください。