2

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

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

肯定有人以前剥过这只猫的皮。有没有更好的方法来使用我不知道的实体框架来做到这一点?

4

2 回答 2

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

于 2013-02-24T06:07:07.613 回答
1

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

于 2013-02-24T02:01:57.873 回答