我正在使用一个数据库,设计师在数据库中决定用IsHistorical位列标记每个表。没有考虑适当的建模,也没有办法更改架构。
在开发与导航属性交互的CRUD屏幕时,这会引起一些摩擦。我不能简单地购买一个产品,然后编辑其EntityCollection,而必须在整个地方手动编写IsHistorical检查,这会使我发疯。
添加也很可怕,因为到目前为止,我已经进行了所有手动检查,以查看添加是否只是软删除,因此无需添加重复的实体,我只需切换IsHistoric。
我考虑过的三个选项是:
是否有人对此有任何经验或可以推荐最轻松的方法?
注意:是的,我知道,这是错误的建模。我已经阅读了有关软删除的相同文章。我必须处理这个要求,但是我确实很讨厌。我只想要最轻松的方法来处理软删除,而无需为数据库中的每个导航属性编写相同的代码。
注意#2 LukeLed的回答在技术上是正确的,尽管它会迫使您陷入一个非常糟糕的困境,从而使ORM(无图形)模式成为现实。答案是正确的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。问题在于,现在我需要从图中提取所有“已删除”的对象,然后在每个对象上调用Delete方法。那真的不会为我节省那么多的手工仪式编码。现在,我不再编写手动的IsHistoric检查,而是收集已删除的对象并遍历它们。
最佳答案
如您所知,您无法修改架构时,将不会有一个很好的解决方案。鉴于您不喜欢“存储库”选项(不过,我想知道您是否不急于取消它),这是我能想到的最好的选择:
ObjectContext.SavingChanges
ObjectStateManager
以查找处于已删除状态的对象。如果它们具有IsHistorical
属性,请进行设置,然后将对象的状态更改为Modifyed。 当涉及到关联/关系时,这可能会变得棘手,但我认为它或多或少地满足了您的需求。
关于entity-framework - 使用 Entity Framework 进行软删除(“历史记录”列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942532/