Linq to SQL:删除多对多关系时出错

本文关键字:关系 出错 删除 to SQL Linq | 更新日期: 2023-09-27 18:32:36

首先,让我们从我的错误开始:

"试图消除X和Y之间的关系。 但是,关系的外键之一不能设置为 null">

现在解释一下我正在尝试做什么...

我有以下数据库表:标本,男性,女性,标本关系。雄性永远是标本,雌性永远是标本。因此,一个标本有两个一对多关系(但逻辑上阻止一个标本同时设置(。此外,男性可以有一对多的女朋友,同样,女性也可以有一对多的男朋友(嘿,毕竟这是 21 世纪(。这已通过创建多对多表(样本关系(来解决。

SQL 中的关系设置为样本删除级联到男性和女性。之后,所需的函数是删除男性/女性以级联到SpecimenRelationship - 但由于SQL限制(多循环路径垃圾!(,这没有完成。所以一个级联,另一个是SetNull(假设男性是SetNull(。

现在对于一切都出错的地方。当我从男性实体中删除样本关系时,我收到上述错误。但为什么会这样呢?我什至看不到我在哪里删除 Male 实体,我不明白 Linq-to-Sql 的工作原理,为什么这不仅仅是直接删除 SpecimenRelationship 条目?

下面是一些示例代码:

Male male = GetMaleFromDataContext();
SpecimenRelationship relationshipToRemove = male.SpecimenRelationships.Single(x => x.FemaleID == someFemaleID);
male.SpecimenRelationships.Remove(relationshipToRemove);
DB.SubmitChanges();//error thrown here

为什么关系级联甚至在这里发挥作用?

Linq to SQL:删除多对多关系时出错

在表上创建关系时,外键列的 NULL 约束会自动设置为 NOT NULL。

您需要将其设置为 NULL,您的级联规则将起作用(我认为(。

设计模式(管理工作室(中的属性名称为"允许空值"。