繁体   English   中英

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

[英]Entity framework - remove related records by id

好的。 假设我有结构:

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

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

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

您的问题的答案与此问题相同。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM