C#Entity Framework删除Cascade Database-First

时间:2017-12-07 03:28:58

标签: c# database entity-framework sql-delete cascade

我使用具有几个父表的数据库优先实体框架从C#到DB的连接。为简单起见,我们称之为表A(父母之一)。此表连接到25个不同的其他表,其中包含源自TABLE A的外键。但是,这些子表可能具有自己的子表。

例如:

A -> B
A -> C -> D
A -> E

父母与子女的父母与其子女之间的关系通常为0.1到多数。对于所有连接字符串,我已将所有End1 OnDelete设置为Cascade。我还将CHILD设置为他们的SUBCHILD到Cascade for End1 OnDelete。所以A - > C和C - > D End1 OnDelete设置为Cascade。但是,当我从A执行删除id = 5时,它仍然无法说明外键约束。但是如果我将表修改为只有没有自己的CHILD的孩子,即:

F -> G
F -> H
F -> I

如果我从没有问题的id = 2的表F中删除,并且他们的CHILD也会被删除,这将有效。

我知道对于代码优先的实体框架,我们可以做类似

的事情
modelBuilder.Entity<User>()
            .HasOptional(a => a.UserDetail)
            .WithOptionalDependent()
            .WillCascadeOnDelete(true);

但我坚持使用数据库优先。另外,我真的不想循环遍历每个表并先删除最小的孩子然后循环 - 我很确定有比两者更好的方法。

我认为问题是如果PARENT有GRANDCHILD那么这就成了数据库第一种方法的级联DELETE的问题。

0 个答案:

没有答案