首先,让我们从错误开始:
"试图删除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
为什么关系级联在这里发挥作用?
答案 0 :(得分:0)
在表上创建关系时,外键列的NULL约束会自动设置为NOT NULL。
您需要将其设置为NULL,并且您的级联规则将起作用(我认为)。
设计模式(Management Studio)中的属性名称为Allow Nulls。