如何将全局过滤器值传递给数据库上下文
How to Pass global filter value to DB Context
我一直在询问具体问题,但似乎没有解决问题。我无法想象我的情况是独一无二的,所以我将尽可能以最简单的方式提问,希望有人能看到我的问题。
我有一个 razor pages 应用程序的数据库上下文。我将需要对某些实体应用全局过滤器,但是,此过滤器会因用户而异,但在会话期间永远不会更改。
本质上我需要的是
public TimeSheetContext(DbContextOptions<TimeSheetContext> options, int Branch)
: base(options)
{
branchFilter = Branch;
}
设置 branchFilter 后,我会将过滤器应用为
modelBuilder.Entity<Branch>().HasQueryFilter(b => b.ContractorCode == branchFilter);
从逻辑上讲,这似乎是一个如此简单的问题,但每当我向 CTOR 添加任何内容(例如上面的 int Branch)时,代码将不会 运行。具体来说,它说我来自 appsettings 的连接字符串不存在,而它显然就像 int Branch 不是他们的一样,我设置了 branchFilter = 6108 的原始值; (作为示例)它工作正常。
所以我的问题归结为如何将任何值传递给上下文构造函数。
您可以查看以下 2 个问题,了解我一直在询问的更详细的地方。
你可以这样做
public TimeSheetContext(string connectionString) : base(GetOptions(connectionString))
{
}
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
通过删除上下文中的空白构造函数解决了这个问题。
所有答案都归功于评论中的 Ivan。
我一直在询问具体问题,但似乎没有解决问题。我无法想象我的情况是独一无二的,所以我将尽可能以最简单的方式提问,希望有人能看到我的问题。
我有一个 razor pages 应用程序的数据库上下文。我将需要对某些实体应用全局过滤器,但是,此过滤器会因用户而异,但在会话期间永远不会更改。
本质上我需要的是
public TimeSheetContext(DbContextOptions<TimeSheetContext> options, int Branch)
: base(options)
{
branchFilter = Branch;
}
设置 branchFilter 后,我会将过滤器应用为
modelBuilder.Entity<Branch>().HasQueryFilter(b => b.ContractorCode == branchFilter);
从逻辑上讲,这似乎是一个如此简单的问题,但每当我向 CTOR 添加任何内容(例如上面的 int Branch)时,代码将不会 运行。具体来说,它说我来自 appsettings 的连接字符串不存在,而它显然就像 int Branch 不是他们的一样,我设置了 branchFilter = 6108 的原始值; (作为示例)它工作正常。
所以我的问题归结为如何将任何值传递给上下文构造函数。
您可以查看以下 2 个问题,了解我一直在询问的更详细的地方。
你可以这样做
public TimeSheetContext(string connectionString) : base(GetOptions(connectionString))
{
}
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
通过删除上下文中的空白构造函数解决了这个问题。 所有答案都归功于评论中的 Ivan。