2011-12-20 75 views
0

好的。假设我有结构:实体框架 - 按ID删除相关记录

学校 - >大学生 - > StudentParents < - 家长 - >地址

学校可以有很多学生,学生可以是亲戚,具有相同的一组家长(可─太多)。每个家长可以有多个地址。
假设拥有同一组父母的学生不能在不同的学校学习。

如果给定school_Id = 5,我想删除这所学校和所有相关记录。 如何在Entity Framework 4中轻松做到这一点?

+0

可能重复的[如何删除与特定实体相关的所有实体?](http://stackoverflow.com/questions/8557679/how-do-i-delete-all-the-entities-related-到一个特定的实体) – Eranga 2011-12-20 01:46:14

回答

2

对此问题的回答将与this question相同。

您正试图解决错误层中的问题。您需要 重新考虑您的数据库设计,特别是如何保持 参照完整性。

您需要设置外键的“CASCADE DELETE”,并在您的实体模型中反映 。然后数据库将进行必要的 更改,以在删除该实体时保持参照完整性。

0

实体框架无法从数据库中删除未作为内存对象实例化的数据。这意味着您需要加载学校数据,所有学生数据,所有学生家长数据等,然后您需要手动删除所有数据。

这似乎是很多工作要做,所以你可能要采取另一种方法解决这个问题 - 删除使用数据库的存储过程,所有这些数据映射到ObjectContext,这将有更好的表现,因为你不会需要将所有数据存入内存。

但这似乎也很麻烦。最好的方法是在数据库上创建Cascade delete约束,并将其映射到实体框架的模型中。这有两个好处 - 您只需要加载学校数据,并且在从模型中删除它之后,它将从数据库中删除,级联删除将删除所有参考数据。但是如果你的学校和学生的数据已经在内存中,EF将负责将那些来自内存的对象标记为已删除,这将使你的数据与数据库状态保持一致。

此问题的最佳解决方案取决于您是否可以修改数据库。如果可以的话 - 去找cascade delete。如果你不能 - 我会建议stored procedure方法更好的表现(假设性能是一个问题,并且数据库中有很多学生,家长等)。