存储库仅在某些情况下获取数据
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
实体,其中包含链接的 Team
和 User
实体(这就是我想要的).
另一方面,当从后台作业调用时,只有 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();
}
}
}
我有一个 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
实体,其中包含链接的 Team
和 User
实体(这就是我想要的).
另一方面,当从后台作业调用时,只有 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();
}
}
}