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

Vaj*_*jda 5 c# entity-framework-4

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

foreach(Student student in program.Students)
program.Students.Remove(student);
Run Code Online (Sandbox Code Playgroud)

但我对此有点怀疑.

比我尝试过这样:

while (program.Students.Count > 0)
    program.Students.Remove(program.Students.ToList()[0]);
Run Code Online (Sandbox Code Playgroud)

但这似乎也很奇怪.

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

Lad*_*nka 26

除非您有一个非常特殊的关联,称为识别您的计划与学生之间的关系,您应该使用以下内容:

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

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

  • 明确的方法仍然只能打破关系,但不会删除学生. (4认同)

Adr*_*uta 12

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

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

  • 正如拉迪斯拉夫所说,"清除()"只会使FK无效.如果你有一个可以为空的类型,这不会引发错误,但学生记录仍然存在.如果FK列不可为空,那么它将在`SaveChanges()`上抛出一个错误.我目前正在使用EF5/6 Code-First. (5认同)