【发布时间】:2010-12-28 21:22:01
【问题描述】:
我正在使用一个数据库,设计人员决定用 IsHistorical 位列标记每个表。没有考虑适当的建模,也无法更改架构。
这在开发与导航属性交互的 CRUD 屏幕时会引起一些摩擦。我不能简单地获取一个产品,然后编辑它的 EntityCollection,我必须在各处手动编写 IsHistorical 检查,这让我发疯。
添加也很糟糕,因为到目前为止我已经编写了所有手动检查以查看添加是否只是软删除,因此我可以切换 IsHistoric 而不是添加重复的实体。
我考虑过的三个选项是:
修改 t4 模板以包括 IsHistorical 检查和同步。
在ObjectContext中拦截删除和添加,切换IsHistorical列,然后同步对象状态。
订阅 AssociationChanged 事件并在此处切换 IsHistorical 列。
有没有人有这方面的经验或者可以推荐最轻松的方法?
注意:是的,我知道,这是不好的建模。我已经阅读了您所拥有的有关软删除的相同文章。它很臭我必须处理这个要求,但我做到了。我只想要最轻松的方法来处理软删除,而无需为数据库中的每个导航属性编写相同的代码。
注意 #2 LukeLed 的答案在技术上是正确的,尽管它迫使你进入一个非常糟糕的穷人 ORM、无图形模式。问题在于,现在我需要从图中删除所有“已删除”的对象,然后对每个对象调用 Delete 方法。那并不能真正为我节省那么多手动仪式编码。现在我不再编写手动 IsHistoric 检查,而是收集已删除的对象并循环访问它们。
【问题讨论】:
-
我感受到了你的痛苦,并且会仔细监控这个帖子。希望你能得到答案!
-
为什么说它真的很差/很差?你能解释更多吗?
标签: entity-framework soft-delete