代码之家  ›  专栏  ›  技术社区  ›  gvdm

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

  •  0
  • gvdm  · 技术社区  · 6 年前

    我有一个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();
        }
    

    它从联接表中提取数据 UserTeam 之间 Users 表和A Teams 表(一) User 属于多个 团队 ,在一 Team 可能有多个 用户 )

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

    另一方面,当它从后台作业调用时,只有 团队 字段被填充,而 用户 部分是空的。

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

    你知道有什么可能导致这个问题吗?

    谢谢你

    2 回复  |  直到 6 年前
        1
  •  1
  •   Alper Ebicoglu    6 年前

    您可以使用 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();
            }
        }
    }
    
        2
  •  0
  •   gvdm    6 年前

    按照 Tseng comment ,后台作业是跨租户的,因此它无权访问 User 表信息。

    我通过获取 用户 将后台作业排队并将数据传递给作业的输入对象之前的数据。