从Entity Framework中的导航属性中删除所有记录

时间:2011-05-30 21:31:56

标签: c# entity-framework-4

我在程序表和学生表之间有1:N关系,EF转换为导航属性。现在我要删除此导航学生中的所有记录。 我开始是这样的:

foreach(Student student in program.Students)
program.Students.Remove(student);

但我对此持怀疑态度。

比我尝试过这样:

while (program.Students.Count > 0)
    program.Students.Remove(program.Students.ToList()[0]);

但这似乎很奇怪。

是否有一些更简单的方法可以做到这一点,或者不是哪种方式最好?

3 个答案:

答案 0 :(得分:24)

除非您的计划与学生之间有非常特殊的名为identifying relation的关联,否则您应该使用以下内容:

foreach(var student in program.Students.ToList())
{
    program.Students.Remove(student); // Break realation
    context.Students.DeleteObject(student); // Delete student
}

从导航属性中删除学生只会将学生中的FK设置为​​null,但不会删除该记录。如果FK不可为空,您将获得例外。

答案 1 :(得分:12)

我真的不知道它是否会起作用,但我无法帮助它,我很好奇。 program.Students.Clear()有效吗? 或者重置它,重新初始化它? 我希望它对你有所帮助......

编辑:请使用@Ladislav Mrnka的回复,因为这是正确的。 我试图删除答案,但我不能,因为它是被接受的

答案 2 :(得分:1)

.Clear()方法非常好。它删除数据库中的所有导航属性。这很简单,而不是foreach循环。