首先,让刚刚与我的错误就开始:LINQ到SQL:错误删除多对多的关系
"An attempt was made to remove a relationship between X and Y. However, one of the relationship's foreign keys cannot be set to null"
现在为我所试图做的解释...
我有以下数据库表格:样本,男性,女性,样本关系。男性总是一个标本,女性总是一个标本。所以一个标本有两个一对多的关系(但是逻辑防止一个标本同时设置)。另外,男性可以有一对多的女朋友,而女性也可以有一对多的男朋友(嘿,毕竟这是21世纪的)。这已通过创建多对多表(SpecimenRelationship)来解决。
SQL中的关系设置为使样本删除级联到男性和女性。之后,所需的功能是删除男性/女性级联到SpecimenRelationship - 但由于SQL限制(多循环路径垃圾!),这是没有完成。所以一个级联,另一个是SetNull(可以说男性是SetNull)。
现在为哪里出问题了。当我从男性实体中删除样本关系时,我会收到上述错误。但为什么会发生?我没有看到我甚至删除了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
为什么关系级联甚至开始发挥作用吗?
看看以前的答案我的:http://stackoverflow.com/a/1182944/15541其实,我有一个更好的回答下面一点:http://stackoverflow.com/a/1183189/ 15541 – leppie
您的样本关系表是否有可空的对男性和女性表格的引用? – baileyrt
@baileyrt:不,它没有空值引用 – musefan