存储库仅在某些情况下获取数据

Repository fetching data only in some cases

我有一个 ASPNET 样板项目;下面的代码片段是从服务和后台作业中执行的

    private readonly IRepository<UserTeam> _userTeamsRepository;
    [...]
    public List<UserTeam> GetUsers(){
        var defaultUsers = _userTeamsRepository
            .GetAllIncluding(ut => ut.Team, ut => ut.User)
            .Where(ut => ut.Team.AlwaysIncluded)
            .ToList();
    }

它从 Users table 和 Teams table 之间的连接 table UserTeam 中获取数据(一个 User属于多个Teams,在一个Team中可以有多个Users).

正如我所说,GetUsers() 方法在 Web 服务和后台作业中都被引用。 使用断点我可以看到,当在 Web 服务中调用该方法时,返回的列表充满了 UserTeam 实体,其中包含链接的 TeamUser 实体(这就是我想要的).

另一方面,当从后台作业调用时,只有 Team 字段被填充,而 User 部分为空。

这是一个非常奇怪的问题,因为这段代码是相同的,唯一不同的是它在同一应用程序的不同上下文中被调用。

您是否知道可能导致此问题的任何原因?

谢谢

根据 ,后台作业是跨租户的,因此它无法访问 User table 信息。

我通过在将后台作业排队并将数据传递到作业的输入对象之前获取 User 数据来解决此问题。

您可以使用 AbpSession

显式设置当前租户
public class MyService
{
    private readonly IAbpSession _session;

    public MyService(IAbpSession session)
    {
        _session = session;
    }

    public void Test()
    {
        using (_session.Use(42, null))
        {
          var defaultUsers = _userTeamsRepository
            .GetAllIncluding(ut => ut.Team, ut => ut.User)
            .Where(ut => ut.Team.AlwaysIncluded)
            .ToList();
        }
    }
}