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

时间:2012-04-30 10:31:24

标签: c# linq-to-sql

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

  

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

现在解释我想要做的事情......

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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