0

用例: 我需要根据来自 BackgroundJob 的 ARGS 提取用户记录

public class ULBackgroundJob : BackgroundJob<ULJobArgsDto>, ITransientDependency, IULBackgroundJob
{
 private readonly IRepository<User, long> _userRepository;
 public ULBackgroundJob
 (IRepository<User, long> userRepository)
  {
    _userRepository = userRepository;
  }

 public  override void Execute(ULJobArgsDto args)
 {
  User user = _userRepository.FirstOrDefault(args.UserId);
 }
}

结果: 我总是得到零结果,并且我检查了用户 ID 值是否存在。

可疑问题: 生成的 SQL 将“@__ef_filter__IsMayHaveTenantFilterEnabled_1=1”插入到查询中,所以我怀疑当我从 BackgroundJob 运行时需要以某种方式将其设置为零..?

4

1 回答 1

3

您需要禁用IMayHaveTenant过滤器才能查看跨租户实体:

using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
{
    User user = _userRepository.FirstOrDefault(args.UserId);
}

您可以在 ASP.NET Boilerplate 文档中阅读有关数据过滤器的更多信息:https ://aspnetboilerplate.com/Pages/Documents/Data-Filters

于 2019-12-12T19:08:14.587 回答