每个DbContext类只调用一次
我有一种情况,我想通过登录的userId或确切地说是一个名为AllowedVehicles
的字段来筛选表。问题是identityContext
只有在登录时才填充字段AllowedVehicles
,并且之后才是从数据库中实际读取的AllowedVehicles
属性。我的代码不起作用,因为一旦执行OnModelCreating
,AllowedVehicles
就是空列表,并且它只执行了一次。
在这种情况下,我如何进行全局筛选器查询。
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));
}
}
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)
);
}