正在从实体框架中的导航属性中删除所有记录

本文关键字:属性 删除 记录 导航 实体 框架 | 更新日期: 2023-09-27 17:58:04

我在Program和Student表之间有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]);

但这似乎也很奇怪。

有什么更简单的方法可以做到这一点吗?如果没有,哪种方法是最好的?

正在从实体框架中的导航属性中删除所有记录

除非你有一个非常特殊的关联,称为识别你的程序和学生之间的关系,否则你应该使用这样的东西:

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

从导航属性中删除student只会将student中的FK设置为null,但不会删除该记录。如果FK不可为null,则会得到一个异常。

我真的不知道它是否有效,但我忍不住,我很好奇。program.Students.Clear()工作吗?或者可能重置它,重新初始化它?我希望它能帮助你。。。

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

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