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