好。假设我有结构:
学校 - >学生 - >学生父母< - 父母 - >地址
学校可以有很多学生,学生可以是亲戚,也可以拥有相同的父母(可能是多对)。每个父母可以有多个地址 假设拥有相同父母的学生不能在不同的学校学习。
如果给出school_Id = 5,我想删除这所学校及所有相关记录。 如何在Entity Framework 4中轻松完成这项工作?
答案 0 :(得分:2)
您的问题的答案与this question相同。
您正试图在错误的图层中解决问题。你需要 重新考虑你的数据库设计,特别是你如何维护 参照完整性。
您需要设置外键的“CASCADE DELETE”并反映 在您的实体模型中。然后数据库将做必要的 更改以在删除时保持引用完整性 实体。
答案 1 :(得分:0)
实体框架无法从未在内存中实例化为对象的数据库中删除数据。这意味着您需要加载学校数据,所有学生数据,所有学生家长数据等,然后您需要手动删除所有数据。
这似乎要做很多工作,所以你可能想采取另一种方法解决这个问题 - 使用映射到ObjectContext
的数据库上的存储过程删除所有这些数据,这样做会更好不需要将所有数据都存入内存。
但这似乎也很麻烦。最好的方法是创建Cascade delete
约束数据库并将其映射到实体框架的模型中。这有两个好处 - 您只需要加载学校数据,在从模型中删除后,它将从数据库中删除,级联删除将删除所有引用数据。但是,如果您的学校和学生数据已经存储在内存中,EF
将会将内存中的这些对象标记为已删除,这将使您的数据与数据库状态保持一致。
此问题的最佳解决方案取决于您是否可以修改数据库。如果可以的话 - 去cascade delete
。如果你不能 - 我会建议stored procedure
方法表现更好(假设表现有问题,数据库中有很多学生,家长等)。