Entity framework core 如何刷新EntityFramework core 5模型或查询筛选器缓存?

Entity framework core 如何刷新EntityFramework core 5模型或查询筛选器缓存?,entity-framework-core,entity-framework-5,Entity Framework Core,Entity Framework 5,我在租户上有此查询筛选器: m.Builder.HasQueryFilter(mm => EF.Property<int>(mm, "TenantId") == SindikatDataSetBase.TenantId); m.Builder.haskqueryfilter(mm=>EF.Property(mm,“TenantId”)==SindikatDataSetBase.TenantId); 当我以其他用户静态变量SindikatDataSetBa

我在租户上有此查询筛选器:

m.Builder.HasQueryFilter(mm => EF.Property<int>(mm, "TenantId") == SindikatDataSetBase.TenantId);
m.Builder.haskqueryfilter(mm=>EF.Property(mm,“TenantId”)==SindikatDataSetBase.TenantId);

当我以其他用户静态变量SindikatDataSetBase.TenantId登录到桌面应用程序时,会发生变化,但查询筛选器仍使用以前的TenantId值。

好吧,使用静态变量是不好的。如果过滤器中的变量是
DbContext

DbContext
TenantId中创建属性并初始化,例如在构造函数中或使用默认初始化

公共类MyDbContext:DbContext
{
public int TenantId{get;set;}=SindikatDataSetBase.TenantId;
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasQueryFilter(mm=>EF.Property(mm,“TenantId”)==TenantId);
}
}
之后,每个新的
MyDbContext
将捕获静态变量,EF可以创建正确的查询

更新

如何避免在
DbContext

这个想法很简单——模仿我们已经在DbContext的方法中

MyDbContext ctx=null;
m、 Builder.haskqueryfilter(mm=>EF.Property(mm,“TenantId”)==ctx.TenantId);

我想知道一个更好的解决方案,不使用静态变量。在这种情况下,我想到的是,我假设使用一个动态变量,它每次都获取值,这对性能不好,不是更好的选择。从逻辑上讲,当用户登录时,应该在内存中保留该用户最常见的静态值,以获得最佳性能。为什么要不断地从DB获取不变的值,特别是当它们非常小的时候?我看不出有什么好处。这个答案的缺点是,然后我需要将查询筛选器定义从IEntityTypeConfiguration移动到OnModelCreating,但如果没有其他选项,我会这样做。你必须这样做。否则它将无法工作。相信我,我不是LINQ翻译的新手。如果您需要此类问题的技术深度,我可以抽出时间解释为什么它只适用于DbContext属性。顺便问一句,您知道如何使用影子属性“Builder.property(typeof(int),“TenantId”).HasDefaultValue()”并告诉EF在插入和更新时不要从数据库获取它吗?我需要设置HasDefaultValue,因为它是在数据库中生成的,但我不需要从数据库中获取它。ValueGeneratedNever()不起作用。再次提高性能。更新了更好的解决方案。你对表演的看法。。。您真的不知道LINQ提供者是如何工作的。