【发布时间】:2021-01-16 12:46:47
【问题描述】:
我正在尝试使用 .NET 5 和 EF Core 构建多租户应用程序,并且我想将全局查询过滤器设置为始终在任何查询中包含 TenantId 过滤器
我尝试了很多方法并遵循了docs,但问题是 EF 缓存了第一个过滤器,并且在更改 TenantId 时不会更新
我编写了以下代码来模拟每个请求更改的 TenantId:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Account>().HasQueryFilter(x => x.TenantId == TenantId);
}
public int TenantId => DateTime.Now.Second;
当我跟踪执行的查询时,TenantId 总是相同的
【问题讨论】:
-
如果
TenantId是上下文的属性,它不会被缓存。您的真实代码很可能与此处显示的不同。 -
@IvanStoev 你说得对,当我在上下文中移动属性时它确实有效,谢谢!但是有什么方法可以依赖上下文之外的属性吗?
标签: .net .net-core entity-framework-core