Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储库仅在某些情况下获取数据_C#_Asp.net Core_Entity Framework Core_Aspnetboilerplate - Fatal编程技术网

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

C# 存储库仅在某些情况下获取数据,c#,asp.net-core,entity-framework-core,aspnetboilerplate,C#,Asp.net Core,Entity Framework Core,Aspnetboilerplate,我有一个ASPNET样板项目;下面的代码段是从服务和后台作业执行的 private readonly IRepository<UserTeam> _userTeamsRepository; [...] public List<UserTeam> GetUsers(){ var defaultUsers = _userTeamsRepository .GetAllIncluding(ut => ut.Te

我有一个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();
    }
private readonly IRepository\u userTeamsRepository;
[...]
公共列表GetUsers(){
var defaultUsers=\u userTeamsRepository
.GetAllIncluding(ut=>ut.Team,ut=>ut.User)
.Where(ut=>ut.Team.Always包括在内)
.ToList();
}
它从
用户
表和
团队
表之间的联接表
用户团队
中获取数据(一个
用户
属于多个
团队
,在一个
团队
中可以有多个
用户

正如我所说的,
GetUsers()
方法在web服务和后台作业中都被引用。 使用断点,我可以看到当在web服务中调用该方法时,返回的列表中充满了
UserTeam
实体,其中包含链接的
Team
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();
        }
    }
}

你在用房客吗?或全局筛选器,每个请求发送值?从后台线程,您无法访问每个请求的信息(例如租户或其他与HttpContext相关的内容)。还要记住,DbContext是并且应该被解析为作用域服务,这意味着每个请求有一个实例。后台服务没有这个功能,通常是一个单例,使您的上下文也成为一个单例,您必须自己管理DbContext的生命周期(解析、操作、处置)Hi@Tseng。是的,我的应用程序是multitenant(我从基本模板开始,它是multitenant),尽管我只使用一个租户。总之,我无法获得用户信息,因为后台工作不是多租户的,对吗?更好的是,它们在所有租户中都是单身,因此无法设置正确的
User
来获取。现在我该怎么做才能解决这个问题?我会尽快尝试这个解决方案