我在一个具有多对多关系的数据库中有两个对象(类,学生)(使用简单的联结表)。我已经弄清楚如何正确地向表中添加新对象,现在我想删除一个对象。
我一直在尝试以下方法:
// (a classobj with id==1 does exist)
ClassObj cl = (from c in entities.ClassObjs where c.ClassID == 1 select c).First();
entities.ClassObjs.DeleteObject(cl);
entities.SaveChanges();
出现错误:
"The DELETE statement conflicted with the REFERENCE constraint \"FK_JunctionClassObjsStudents_Students\".
其中JunctionClassObjsStudents是联结表的名称,它创建了类和学生表之间的多对多关系。
我需要做什么?谢谢你的帮助!!
答案 0 :(得分:2)
一种解决方案是在FK上放置一个级联(或SET NULL
),然后重新生成您的实体模型。
答案 1 :(得分:1)
假设我理解正确(这是一个很大的假设)......
班级表 - > Class_Student_Junction表< - 学生表
在我看来,你需要分两步完成。我想到的问题是你制作的Junction Table,它有约束。没有把它放入代码中我会说...
步骤1:记下要删除的班级的键
步骤2:从连接表中删除所有类的外键等于步骤1中的类。
步骤3:从Classes表中删除类记录。该命令不应有任何重大违规行为。
答案 2 :(得分:0)
您必须浏览引用此StudentObj
的每个ClassObj
并删除引用。这对于保持参照完整性是必要的。