EF Core全局筛选器按userId查询



我有一种情况,我想通过登录的userId或确切地说是一个名为AllowedVehicles的字段来筛选表。问题是identityContext只有在登录时才填充字段AllowedVehicles,并且之后才是从数据库中实际读取的AllowedVehicles属性。我的代码不起作用,因为一旦执行OnModelCreatingAllowedVehicles就是空列表,并且它只执行了一次。

在这种情况下,我如何进行全局筛选器查询。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyGlobalFilters<IBaseEntity>(x => x.DeletedAt == null);
if (_identityContext != null && _identityContext.AllowedVehicles.Count() > 0)
{
modelBuilder.ApplyGlobalFilters<Vehicle>(x => _identityContext.AllowedVehicles.Select(x => x.Id).Contains(x.Id));
}
}
每个DbContext类只调用一次OnModelCreating。并且您不必期望您可以有条件地应用过滤器。

一个解决方案是在过滤器中定义您的条件:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyGlobalFilters<IBaseEntity>(x => x.DeletedAt == null);
modelBuilder.ApplyGlobalFilters<Vehicle>(x => _identityContext == null 
|| !_identityContext.AllowedVehicles.Any() 
|| _identityContext.AllowedVehicles.Select(x => x.Id).Contains(x.Id)
);
}

最新更新