嗨,我有一个包含许多表和关系的复杂数据库 我们要做的是将所有表从一个数据库复制到另一个表,但仅从一个表(销售订单)开始并按照关系向下进行行。 因此,我避免使用.include,而是使用IQueryable查询(每个表一个) 插入没有问题
问题是当我想从所有表中删除所有行时,我遇到了约束违例 我使用.RemoveRange(tableRowsqueryable)
我已经尝试禁用所有FK检查,但是当我重新启用时会出现相同的错误
错误
SqlException:DELETE语句与REFERENCE冲突 约束“ FK_InvParty_Stop_InvParty”。发生冲突 数据库“ UDM”,表“ dbo.InvParty_Stop”,列“ InvPartyID”。
InvPartyID列也在InvParty_Stop表的PK中
我尝试调试以检查是否缺少某些东西,但是我没有发现任何错误! 另一种解决方案是使用存储过程来完成这项工作
答案 0 :(得分:0)
删除或更新具有外键关系的项目时,您需要指定对相关记录的处理。这些设置在数据库级别执行。您可以检查语法参考on MSDN。 您有以下选择:
[删除{无操作|级联| SET NULL |设置默认值}]
您可以在下面的help article中查看详细说明,然后选择适合您情况的最佳方法。
答案 1 :(得分:0)
好的,如果您有一个与另一个表相关联的表。如果您尝试删除关联的那一行,则会发生这种情况。
示例:
| Table Person | Table Car |
| ------------ | ----------- |
| ID | ID |
| Name | PersonFK_ID |
正如您在上面看到的,表Person与表车关联。让我们看一些数据。
| Table Person |
| --------------- |
| ID | Name |
| 1 | Mark |
| 2 | Caio |
| 3 | David |
| --------------- |
| Table Car |
| ID | PersonFK_ID |
| 10 | 2 |
| 11 | 1 |
现在,如果您尝试删除ID为1的人,这将通知ID为11
PersonFK_ID 1
的汽车中的数据冲突。现在,如果您尝试从Table car中删除任何行,则不会有冲突,因为该table car与其他表没有关联。然后,要删除ID为1
的人,请先删除ID为11
的汽车。
您可以通过两种简单的方法来解决此问题:
1-删除关联的数据;
2-将外部列转换为简单列。
OBS:the column FK_InvParty_Stop_InvParty looks like InvPartyID from InvParty_Stop
您可以根据需要搜索其他方式。