Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq to SQL:删除多对多关系时出错_C#_Linq To Sql - Fatal编程技术网

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

C# Linq to SQL:删除多对多关系时出错,c#,linq-to-sql,C#,Linq To Sql,首先,让我们从我的错误开始: “试图删除X和Y之间的关系。 但是,关系的一个外键不能设置为null“ 现在来解释一下我想做什么 我有以下数据库表:样本、男性、女性、样本关系。男性永远是标本,女性永远是标本。因此,一个样本有两个一对多的关系(但逻辑阻止样本同时设置这两个关系)。此外,男性可以有一对多的女朋友,女性也可以有一对多的男朋友(嘿,毕竟这是21世纪)。通过创建多对多表(SpecimenRelationship)解决了这个问题 SQL中的关系被设置为一个样本delete级联到阳性和阴性。之后

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

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

现在来解释一下我想做什么

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

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

现在谈谈哪里出了问题。当我从男性实体中删除一个SpecimenRelationship时,我得到了上面的错误。但为什么会发生这种情况?我甚至不知道我在哪里删除了男性实体,我不明白Linq到Sql是如何工作的,为什么这不只是直接删除一个SpecimenRelationship条目

下面是一些示例代码:

Male male = GetMaleFromDataContext();

SpecimenRelationship relationshipToRemove = male.SpecimenRelationships.Single(x => x.FemaleID == someFemaleID);

male.SpecimenRelationships.Remove(relationshipToRemove);

DB.SubmitChanges();//error thrown here

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

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

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


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

请看我之前的答案:实际上,我有一个更好的答案,如下所示:您的SpecimeRelationship表是否有可为空的对男性和女性表的引用?@baileyrt:No,它没有可为空的引用如果你试图从女性而不是男性的关系中删除关系,会发生什么?或者尝试从双方删除关系,然后保存。。