EF CORE Global Query Filter aktivieren dynamisch deaktivieren
Posted: 17 Feb 2025, 08:24
Ich versuche, einen EF Core Global Query -Filter mit Deaktivierungsbedingungen zu implementieren. Nach meinem Szenario habe ich ein Flag namens " filterstatus " und seine Wertänderungen für jeden Benutzer. Daher wird jeder Benutzer im System filterstatus Wert geändert. Ich möchte einen globalen Abfragefilter implementieren, um Daten gemäß dem filterstatus Flag zu filtern. Aussage des globalen Abfragedilters: < /p>
Führen Sie im obigen Code immer das else -Teil aus, selbst wenn die userClaimFilter.filterstatus wahr ist. Ich denke Wert?
Code: Select all
public partial class TableDbContext : DbContext, IDbContext
{
protected Guid TenantId { get; set; }
protected UserClaimFilter UserClaimFilter { get; set; } = new UserClaimFilter();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var tenant = _httpContextAccessor?.HttpContext?.GetTenant();
if (tenant != null)
{
TenantId = Guid.Parse(tenant.Id);
var userClaims = _httpContextAccessor.HttpContext.Session
.GetObject(DefaultConstants.SessionUserClaimStore);
if (userClaims != null)
{
UserClaimFilter = userClaims;
}
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity(entity =>
{
if (UserClaimFilter.FilterStatus && UserClaimFilter.RegionClaims.Any())
{
entity.HasQueryFilter(a => a.TenantId == TenantId
&& UserClaimFilter.RegionClaims.Contains(a.RegionCode));
}
else
{
entity.HasQueryFilter(a => a.TenantId == TenantId);
}
});
}
}