繁体   English   中英

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

[英]Linq to SQL: Error deleting many to many relationship

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

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

现在解释我想要做什么......

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

设置SQL中的关系,以便标本删除级联到Male和Female。 之后,所需的功能是删除男性/女性以级联到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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM