我想使用一个名为 Deleted 的字段来保护我的实体,以防止客户端真正删除任何实体。如果他尝试删除,唯一的事情就是 entity.Deleted = true;
问题是我不想在任何地方包括我需要使用的已删除实体
db.Entities.Where(e => e.Deleted == false).WhateverMethod();
我知道我可以在我的 Controller 中使用这样的方法
private IQueryable<Entity> GetNotDeletedEntity() {
return db.Entities.Where(e => e.Deleted == false);
}
并为 GetNotDeletedEntity().WhateverMethod()
更改每个 db.Entities.WhateverMethod()
,但我觉得很奇怪。
需要注意的是,GetNotDeletedEntity()
返回 IQueryable,而 db.Entities
返回 DbSet。这种不一致可能会成为 future 的问题。
我认为有一种方法可以扩展 DbSet 以像这样工作
db.Entities//包括所有实体
db.NotDeletedEntities//只包含实体 e.Deleted == false
关于如何 DRY .Where(e => e.Deleted == false)
的任何建议都会很棒。
最佳答案
看起来这个人试图完成非常相似的事情。在这里查看 Jon Skeet 的解释:extension for DbSet
关于c# - 在 DbSet 中创建预过滤层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421126/