c# - 在 DbSet 中创建预过滤层

标签 c# entity-framework-5

我想使用一个名为 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/

相关文章:

c# - 此类型分配错误是 WCF 或 Windows Workflow Foundation 4.5 中的错误吗?

c# - 如何将变量传递给按钮事件方法?

c# - 如何在 asp.net mvc 中渲染图像?

c# - SQL Server 未计算表达式

c# - 带有可选参数的 Entity Framework ?

c# - Entity Framework 5 不使用 xml 字符串更新行

c# - 查找终端服务用户的文档文件夹

c# - 具有接口(interface)和通用模​​型的 WCF

razor - MVC 4 - 如何在 View 中将 linq 返回到实体查询结果

asp.net - OrmLite 真的与数据库无关吗?