【发布时间】:2015-04-29 04:17:28
【问题描述】:
Template 可以有零个或多个Document 和零个或多个MetaIndex。 Document 可以有零个或多个Index,MetaIndex 也可以有零个或多个Index:
这代表潜在的级联问题,因为删除Template 将删除其Document(没关系);删除Document 将删除其Index,这也可以。但是当删除Template 尝试删除MetaIndex(这也会删除Index)时会出现问题(一个循环)。
我理解这个问题。我认为解决它的一种方法是指定当我删除模板时,它的文档及其文档的索引被删除,以及与模板关联的元索引。但是元数据不会级联删除它的关联索引,因此不会出现循环。
在这里搜索potential solution,我试过这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MetaIndex>().HasMany<Index>(m => m.IndicesEnteros).WithRequired().WillCascadeOnDelete(false);
}
但它不起作用:
在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束。查看以前的错误。
【问题讨论】:
-
在我看来,您在指定 WithRequired() 时尝试设置约束,但随后将级联设置为 false。如果您删除了一个从属元素 db 将不会更新另一个元素并且将违反约束。为了解决这个问题,请尝试启用级联。
-
@GustavoSuarez,级联正是我想要删除的。无论我是否改用 WithOptional(),行为都是一样的。
标签: c# entity-framework-6 ef-fluent-api