C# 实体框架代码优先:有没有一种方法可以自动从数据库集中过滤禁用的行?
在我必须面对的数据体系结构中,没有删除。相反,所有记录都有一个可为空的datetime2,表示该记录已被“禁用”。这意味着在直接选择实体的情况下,我必须始终添加一个检查来查看实体是否被禁用 到目前为止,我想到的只是一个名为C# 实体框架代码优先:有没有一种方法可以自动从数据库集中过滤禁用的行?,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,在我必须面对的数据体系结构中,没有删除。相反,所有记录都有一个可为空的datetime2,表示该记录已被“禁用”。这意味着在直接选择实体的情况下,我必须始终添加一个检查来查看实体是否被禁用 到目前为止,我想到的只是一个名为.Enabled()的简单扩展方法,它只获取已启用的行。到目前为止,它似乎很有效,但我在每种情况下都必须输入它,这也很烦人 肯定以前有人剥过这只猫的皮。有没有更好的方法可以使用我并不熟悉的Entity Framework来实现这一点?我不知道Entity Framework的原
.Enabled()
的简单扩展方法,它只获取已启用的行。到目前为止,它似乎很有效,但我在每种情况下都必须输入它,这也很烦人
肯定以前有人剥过这只猫的皮。有没有更好的方法可以使用我并不熟悉的Entity Framework来实现这一点?我不知道Entity Framework的原生功能。但通常当我遇到这个问题时,我会创建一个“存储库”层,运行大多数数据库事务。然后我创建了一些方法,比如
GetAll()
,它返回所有项目,并使用适当的where语句隐藏“已删除”的项目。我想您可以这样做
public class MyContext : DbContext
{
public IDbSet<Thing> Things { get; set; }
public IQueryable<Thing> EnabledThings
{
get
{
return Things.Where(t => t.Enabled);
}
}
}
公共类MyContext:DbContext
{
公共IDbSet对象{get;set;}
公共IQueryable启用项
{
得到
{
返回东西,其中(t=>t.Enabled);
}
}
}
或者与扩展方法相同(但在上下文中不是DbSet/queryable)
就我个人而言,在实践中,我实际上完全按照您在示例中所做的那样,使用
Things.Enabled()。无论什么是的,我想我会坚持我所拥有的。我只是希望会有这样的人,“哦,是的,你只需要实现强大,翻转这个Wiffle位和这个华夫格位,还有bango!你得到了你需要的…”。。。谢谢