我有一张可以自我引用的表格(例如' MyTable'),即。它有一个ParentId可以指向同一个表中的另一条记录(因此您可以存储相关节点的树)。
问题在于,当我尝试删除作为特定父级子项的所有记录时,我得到以下异常(使用EF 6):
DELETE语句与SAME TABLE REFERENCE约束冲突" FK_dbo.MyTable_dbo.MyTable_ParentId"。冲突发生在数据库" foo",table" dbo.MyTable",column' ParentId'中。 声明已经终止。
(我正在执行像context.Database.ExecuteSqlCommand("DELETE FROM [MyTable] WHERE ParentId = {0}", parentId);
我尝试通过添加Children属性来修复它,并使用流畅的api来设置级联删除,如下所示:
modelBuilder.Entity<MyTable>()
.HasMany(t => t.Children)
.WithOptional(t => t.Parent)
.WillCascadeOnDelete(true);
但是这会产生以下错误:
介绍FOREIGN KEY约束&#39; FK_dbo.MyTable_dbo.MyTable_ParentId&#39;在桌面上&#39; MyTable&#39;可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
当我手动删除FK并使用ON CASCADE DELETE重新创建它时,我得到相同的错误。
我现在对如何解决这个问题有点失落..所以欢迎任何想法:)
答案 0 :(得分:0)
使用tempdb; GO
如果OBJECT_ID('tempdb ..#Employees')不是NULL DROP TABLE #Employees; GO
CREATE TABLE #Employees ( emp INT PRIMARY KEY, mgrid INT NULL REFERENCES #Employees, empname VARCHAR(25)NOT NULL ); CREATE UNIQUE INDEX idx_unc_mgrid_empid ON #Employees(mgrid,empid);
INSERT INTO #Employees(empid,mgrid,empname)VALUES (1,NULL,'大卫'), (2,1,'Eitan'), (3,1,'Ina'), (4,2,'Seraph'), (5,2,'Jiru'), (6,2,'史蒂夫'), (7,3,'亚伦'), (8,5,'Lilach'), (9,7,'丽塔'), (10,5,'肖恩'), (11,7,'加布里埃尔'), (12,9,'艾米利亚'), (13,9,'迈克尔'), (14,19,'滴滴'); GO
DELETE FROM #Employees WHERE mgrid = 9 SELECT * FROM #Employees;