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

C# 从实体框架中的导航属性中删除所有记录,c#,entity-framework-4,C#,Entity Framework 4,我在程序和学生表之间有1:N的关系,这些表被转换为导航属性。现在我想删除这个导航中的所有记录。 我是这样开始的: foreach(Student student in program.Students) program.Students.Remove(student); foreach(var student in program.Students.ToList()) { program.Students.Remove(student); // Break realation

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

foreach(Student student in program.Students)
program.Students.Remove(student);
foreach(var student in program.Students.ToList())
{
    program.Students.Remove(student); // Break realation
    context.Students.DeleteObject(student); // Delete student
}
但我对此有点怀疑

然后我试着这样做:

while (program.Students.Count > 0)
    program.Students.Remove(program.Students.ToList()[0]);
但这似乎也很奇怪


有更简单的方法吗?如果没有,哪种方法最好?

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

编辑:请使用@Ladislav Mrnka的回复,因为这是正确的回复。
我试图删除答案,但我无法删除,因为这是公认的答案,除非你的课程和学生之间有非常特殊的联系,否则你应该使用以下内容:

foreach(Student student in program.Students)
program.Students.Remove(student);
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,您将得到一个异常。

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

Hehe:)。我不敢相信我错过了Clear():)我在搜索像RemoveAll、DeleteAll:)这样的东西,正如拉迪斯拉夫所说,
Clear()
只会使FK无效。如果您有一个可为null的类型,这将不会抛出错误,但学生记录仍将存在。如果FK列不可为null,则它将在
SaveChanges()
上引发错误。我当前使用的是EF5/6 Code-First.When,我使用Clear()方法删除。出现此错误:操作失败:无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。这不是答案。使用“clear”清除导航属性集合不会删除实体,并导致Soren描述的错误。错误答案使用clear所做的只是删除关系。clear()方法如何?clear方法仍应仅断开关系,但不会删除学生。调用clear()后,我刚刚检查了表数据,所有数据都将被删除。所以Clear()删除所有数据。只有当我查看表数据时,这些没有关系的数据没有显示出来,才可能发生这种情况,对此我毫不怀疑。我没说我在Clear()之后调用SaveChanges(),Ladislav,也许你没有调用SaveChanges()方法就想到了。你的
学生
类是如何定义的?您使用的是POCOs还是EntityObjects?很旧,但是当使用
Clear()
Remove()
时,我会遇到外键冲突。当我使用
DeleteObject()
时,我没有收到任何错误。不幸的是,Clear不会从数据库中删除已清除的元素