3

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

“试图删除 X 和 Y 之间的关系。但是,不能将关系的外键之一设置为空”

现在解释我正在尝试做的事情......

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

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

现在是所有出错的地方。当我从 Male 实体中删除 SpecimenRelationship 时,出现上述错误。但是为什么会这样呢?我什至没有看到我在哪里删除了 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

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

4

1 回答 1

0

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

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

设计模式 (Management Studio) 中的属性名称是 Allow Nulls。

于 2012-10-01T19:39:54.523 回答