有没有办法在 Entity Framework Core 中定义通用关系过滤器?

Posted

技术标签:

【中文标题】有没有办法在 Entity Framework Core 中定义通用关系过滤器?【英文标题】:Is there a way to define common relationship filters in Entity Framework Core? 【发布时间】:2022-01-14 11:37:13 【问题描述】:

假设我的关系定义为:

public class Report 
  public bool Approved  get; set; 


public class FileCabinet 
  public List<Report> Reports  get; set; 
  [NotMapped]
  public IEnumerable<Report> ApprovedReports => Reports.Where(x => x.Approved);

ApprovedReports 未映射,不能用于数据库查询,但它会在本地过滤来自数据库的结果。我想以一种可以在 Linq 查询数据库中使用的方式定义过滤器,而不是开发人员必须使用.Where(x =&gt; x.Approved)。有没有办法在 EF Core 中映射此属性或定义过滤器?需要明确的是,这不是全局过滤器。这是一些查询会使用而其他查询不会使用的常见过滤器。

【问题讨论】:

【参考方案1】:

不在实体本身上,因为它没有对 DbContext 的引用,并且Reports 是一个集合,而不是一个查询。您可以在 DbContext 上放置一个方法

IQueryable<FileCabinet> FileCabinetWithApprovedReports => this.FileCabinets.Include( f => f.Reports.Where( r => r.Approved) );

您可以向其中编写其他查询表达式。

或添加Global Query Filter 以使已批准的报告成为默认报告。

【讨论】:

以上是关于有没有办法在 Entity Framework Core 中定义通用关系过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 Entity Framework Core 部分保存数据?

有没有办法以编程方式检查 Entity Framework Core 中的待定模型更改?

Entity Framework Core RC2 表名复数

是否可以在 MS Entity Framework 中查询新添加的对象

如何在 Entity Framework 4.3.1 中禁用迁移?

如何在 Entity Framework 4.3.1 中禁用迁移?