我有一个ASPNET Boilerplate项目;下面的代码是从服务和后台作业中执行的
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
表之间的联接表Teams
中获取数据(其中一个User
属于多个Teams
Team
可以有多个Users
)。
正如我所说,GetUsers()
方法在Web服务和后台作业中都被引用。
使用断点,我可以看到,在Web服务中调用该方法时,返回的列表充满了UserTeam
个实体,其中包含链接的Team
和User
实体(这就是我想要的) )。
另一方面,从后台作业中调用它时,仅填充Team
字段,而User
部分为空。
这是一个非常奇怪的问题,因为代码段是相同的,唯一不同的是在同一应用程序的不同上下文中调用了它。
您知道什么可能导致此问题吗?
谢谢
答案 0 :(得分:1)
您可以使用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();
}
}
}
答案 1 :(得分:0)
根据Tseng comment,后台作业是跨租户,因此它无权访问User
表信息。
我通过在将后台作业排队之前获取User
数据并将数据传递到作业的输入对象来解决此问题。