从实体框架中删除具有多对多关系的对象?

时间:2010-08-04 21:33:25

标签: c# entity-framework asp.net-mvc-2

我在一个具有多对多关系的数据库中有两个对象(类,学生)(使用简单的联结表)。我已经弄清楚如何正确地向表中添加新对象,现在我想删除一个对象。

我一直在尝试以下方法:

// (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是联结表的名称,它创建了类和学生表之间的多对多关系。

我需要做什么?谢谢你的帮助!!

3 个答案:

答案 0 :(得分:2)

一种解决方案是在FK上放置一个级联(或SET NULL),然后重新生成您的实体模型。

答案 1 :(得分:1)

假设我理解正确(这是一个很大的假设)......

班级表 - > Class_Student_Junction表< - 学生表

在我看来,你需要分两步完成。我想到的问题是你制作的Junction Table,它有约束。没有把它放入代码中我会说...

步骤1:记下要删除的班级的键

步骤2:从连接表中删除所有类的外键等于步骤1中的类。

步骤3:从Classes表中删除类记录。该命令不应有任何重大违规行为。

答案 2 :(得分:0)

您必须浏览引用此StudentObj的每个ClassObj并删除引用。这对于保持参照完整性是必要的。