【发布时间】:2021-12-19 21:36:31
【问题描述】:
我打算通过 HasQueryFilter 在 EF CORE 中使用全局过滤器,像这样
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var filter = _tenantFilterProvider.GetExpression();
modelBuilder.Entity<MyEntity>()
.HasQueryFilter(filter);
}
我的 lambda 表达式由一个名为 TenantFilterProvider 的类提供,该类具有一个返回 LambdaExpression 的简单方法。此 lambda 表达式引用在 TenantFilterProvider 中声明的私有字段
public class TenantFilterProvider
{
private readonly CurrentTenant _currentTenant;
public TenantFilterProvider(CurrentTenant currentTenant)
{
_currentTenant = currentTenant;
}
public LambdaExpression GetExpression()
{
Expression<Func<MyEntity, bool>> expression = entity => entity.TenantId == _currentTenant.TenantId;
return expression;
}
}
TenantFilterProvider 和 CurrentTenant 都在 aspnetcore 的内置依赖注入中注册为作用域。
lambda 将存储在 Ef Core 模型内的全局变量中,所以我担心引用字段的表达式(在本例中为 _currentTenant)。
这会造成任何类型的内存问题吗?比如内存泄漏?
如果提供的代码不够用,我将整个代码上传到这个仓库https://github.com/kewinbrand/EfCoreQueryFilter
【问题讨论】:
标签: c# .net-core entity-framework-core