有什么方法可以在模型中预定义一个查询,该查询只要从上下文中调用该模型就会运行

is there any way to pre-define a query in a model that runs whenever that model is called from context

我的 mvc 5 项目中有一个名为 operations 的模型。

public class Operation
    {
        public int OperationID { get; set; }
        public string Name { get; set; }
        public decimal Commission { get; set; }
        public int DepartmentID { get; set; }
        public bool CommissionValidity { get; set; }
        public bool IsHidden { get; set; }
        public decimal Capacity { get; set; }
        public virtual Department Department { get; set; }
    }

要求是每当从上下文中调用此模型时 如下图

Var db = new ApplicationDbContext();
var Operations = db.Operations.tolist();

我只想加载 IsHidden 字段为 False 的记录,而无需在查询中使用 where 子句

有没有像我创建构造函数或定义 getter Setter 函数那样的方法来实现目标。

如果您使用的是 Entity Framework 内核,则可以使用 global query filter 来实现。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<Operation>().HasFilter(o => !o.IsHidden);
}

Entity Framework 6 没有查询过滤器。为此,您需要在 DbContext 上使用不同的 属性 到 return 您的可见实体:

public IQueryable<Operation> VisibleOperations 
    => Set<Operation>().Where(o => !o.IsHidden);

但是,您将无法使用此筛选查询在数据库中添加或删除实体,因此您可能仍需要公开完整的 IDbSet<Operation>,其中不包含已应用过滤器。