实体框架 - 按ID删除相关记录

时间:2011-12-20 00:46:45

标签: c# entity-framework asp.net-4.0

好。假设我有结构:

  

学校 - >学生 - >学生父母< - 父母 - >地址

学校可以有很多学生,学生可以是亲戚,也可以拥有相同的父母(可能是多对)。每个父母可以有多个地址 假设拥有相同父母的学生不能在不同的学校学习。

如果给出school_Id = 5,我想删除这所学校及所有相关记录。 如何在Entity Framework 4中轻松完成这项工作?

2 个答案:

答案 0 :(得分:2)

您的问题的答案与this question相同。

  

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

     

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

答案 1 :(得分:0)

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

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

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

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