Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架核心全局动态查询过滤器_Entity Framework_Entity Framework Core_Ef Core 3.1 - Fatal编程技术网

Entity framework 实体框架核心全局动态查询过滤器

Entity framework 实体框架核心全局动态查询过滤器,entity-framework,entity-framework-core,ef-core-3.1,Entity Framework,Entity Framework Core,Ef Core 3.1,我们正在使用ef core 3.1 我们想使用动态查询过滤器, 我尝试了示例实现,但并没有按照预期正常工作,总是过滤相同的租户id,我试图在下面解释 公共类TestDbContext:DbContext { 公共数据库集租户{get;set;} 私有只读ITenantProvider\u租户Provider; 私有Guid?TenantId=>\u tenantProvider.TenantId; publictestdbcontext(DbContextOptions选项,ITenantPr

我们正在使用ef core 3.1 我们想使用动态查询过滤器, 我尝试了示例实现,但并没有按照预期正常工作,总是过滤相同的租户id,我试图在下面解释


公共类TestDbContext:DbContext
{
公共数据库集租户{get;set;}
私有只读ITenantProvider\u租户Provider;
私有Guid?TenantId=>\u tenantProvider.TenantId;
publictestdbcontext(DbContextOptions选项,ITenantProvider租户提供者):基本(选项)
{
_租户提供者=租户提供者;
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.haskqueryfilter(p=>EF.Property(p,“TenantId”)==TenantId);
}
}
ITenantProvider从HttpContext头返回TenantId

此代码从第一个请求中筛选始终相同的租户id

更新:


 public class TenantProvider : ITenantProvider
    {
        private readonly IHttpContextAccessor _httpContextAccessor;

        public TenantProvider(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public Guid? TenantId
        {
            get
            {
                if (_httpContextAccessor.HttpContext.Request.Headers.TryGetValue(HeaderNames.TenantId, out var tenantId) &&
                    Guid.TryParse(tenantId, out Guid parsedTenantId))
                {
                    return parsedTenantId;
                }
                return null;
            }
        }
    }

比如说 第一次请求租户=60000000-0000-0000-0000-000000000000 此筛选器=>60000000-0000-0000-0000-000000000000

第二次请求租户=10000000-0000-0000-0000-000000000000
此筛选器=>60000000-0000-0000-0000-000000000000

但不起作用
不是问题描述。而且
此代码从第一个请求中筛选始终相同的租户id
听起来好像过滤器确实起作用了。每次都返回相同ID的是
\u tenantProvider.TenantId
。或者每次都使用相同的DbContext(非常糟糕的主意),这意味着您总是使用
TenantId
字段中存储的值发布
ITenantProvider
代码。这似乎与EF无关Core@PanagiotisKanavos补充说明正确。将
TenantId
的可见性更改为
public
不会有帮助?但是您是否使用了不同的DbContext实例?还是单身/合用的?