实体框架代码优先:有没有办法从DbSets自动过滤禁用的行?

时间:2013-02-24 01:52:50

标签: c# entity-framework entity-framework-5

在我必须应对的数据架构中,有 no deletes 。相反,所有记录都有一个可为空的datetime2,表示记录已被“禁用”。这意味着在直接选择实体的情况下,我将不得不添加一个检查以查看实体是否被禁用。

到目前为止,我提出的只是一个名为.Enabled()的简单扩展方法,它只获取已启用的行。到目前为止似乎有效,但我也必须在每种情况下键入它。

当然,其他人之前已经剥过这只猫了。有没有更好的方法来实现这个实体框架我只是不知道?

3 个答案:

答案 0 :(得分:2)

我想你可以做这样的事情

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

答案 1 :(得分:1)

我不知道Entity Framework的任何原生内容。但通常当我遇到这个时,我会创建一个“存储库”层,我通过它运行大多数数据库事务。然后我创建像GetAll()这样的方法,它返回所有具有适当where语句的项目,以隐藏“已删除”项目。

答案 2 :(得分:1)

我想也许你可以使用Table Per Hierarchy继承来解决这个问题

This link may help