在我必须应对的数据架构中,没有删除。相反,所有记录都有一个可以为空的 datetime2 表示记录已“禁用”。这意味着在直接选择实体的情况下,我总是必须添加检查以查看实体是否被禁用。
到目前为止,我想出的只是一个简单的扩展方法.Enabled()
,它只获取启用的行。到目前为止它似乎很有效,但我必须在每种情况下都输入它也很烦人。
肯定有人以前剥过这只猫的皮。有没有更好的方法来使用我不知道的实体框架来做到这一点?
在我必须应对的数据架构中,没有删除。相反,所有记录都有一个可以为空的 datetime2 表示记录已“禁用”。这意味着在直接选择实体的情况下,我总是必须添加检查以查看实体是否被禁用。
到目前为止,我想出的只是一个简单的扩展方法.Enabled()
,它只获取启用的行。到目前为止它似乎很有效,但我必须在每种情况下都输入它也很烦人。
肯定有人以前剥过这只猫的皮。有没有更好的方法来使用我不知道的实体框架来做到这一点?
我想你可以做这样的事情
public class MyContext : DbContext
{
public IDbSet<Thing> Things { get; set; }
public IQueryable<Thing> EnabledThings
{
get
{
return Things.Where(t => t.Enabled);
}
}
}
或与扩展方法相同(但在上下文中不是 DbSet/queriable)。
就个人而言,在实践中,我实际上完全按照您在示例中所做的操作并使用Things.Enabled().Whatever
我不知道实体框架的任何原生内容。但通常当我遇到这种情况时,我会创建一个“存储库”层,通过它运行大多数数据库事务。然后我创建方法GetAll()
,例如返回所有带有适当 where 语句的项目以隐藏“已删除”项目。