有没有办法在 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 => 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 中查询新添加的对象