我有一个 ASPNET Boilerplate 项目,它在一个应用程序服务中使用存储库来访问数据库中的一些数据
public class AnAppService : AsyncCrudAppService<MyEntity, MyEntityDto, int, PagedAndSortedResultRequestDto, MyEntityDto, MyEntityDto>, IAnAppService
{
private readonly IRepository<UserTeam> _userTeamsRepository;
public AnAppService(IRepository<MyEntity> repository,
IRepository<UserTeam> userTeamsRepository)
: base(repository)
{
_userTeamsRepository = userTeamsRepository;
}
public override Task<MyEntityDto> Create(MyEntityDto input)
{
[...]
var myDbContext = _myDbContextProvider.GetDbContext();
var uteams = // Here the items have null User objects, though it was included in the query
myDbContext.UserTeams
.Include(ut => ut.User)
.Where(ut => ut.Team.Id == teamId)
.ToList();
[...]
}
}
}
在开发过程中,一切正常,链接数据被获取。现在我已经将它部署在 IIS 7 服务器上,但它不再工作了。调试,可以看到defaultUsers
list不为空(并且项目数等于开发机中的项目数),但单项为空。我在这两种环境中使用具有相同数据库的相同用户。
这是UserTeam
实体的定义。它只是样板User
实体和Team
我的实体之间的多对多映射。
public class UserTeam : Entity<int>
{
public User User { get; set; }
public Team Team { get; set; }
}
你怎么看待这件事?
更新1:
我直接执行 SQL 查询只是为了检查它是否可能是样板问题或其他问题。这是我运行的代码(以相同的方法)
string queryString = "SELECT u.name name FROM UserTeams ut join AbpUsers u on ut.UserId = u.Id";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var name = reader["name"]; // The name variable has a value
}
}
好吧,数据被提取,我没有用户数据的空值。ASPNET Boilerplate、Entity Framework Core 和 SQL 引擎之间似乎出现了一些问题。你有什么线索吗?
更新2:我在考虑User
实体读取操作的权限问题,所以我检查了这个:
public class AnAppService : AsyncCrudAppService<MyEntity, MyEntityDto, int, PagedAndSortedResultRequestDto, MyEntityDto, MyEntityDto>, IAnAppService
{
private readonly IRepository<User, long> _usersRepository;
public AnAppService(IRepository<MyEntity> repository,
IRepository<UserTeam> userTeamRepository)
: base(repository)
{
_userTeamRepository = userTeamRepository;
}
public override Task<MyEntityDto> Create(MyEntityDto input)
{
[...]
var users = _usersRepository.GetAll();
[...]
}
}
}
这里我在User
实体上使用一个简单的存储库来读取所有用户。好吧,虽然在开发机器上我可以获取所有用户,但在部署机器上只admin
返回用户。在这两种情况下,我都与admin
用户一起登录。我认为UserTeam
存储库没有获取非空用户,因为出于某种原因,User
登录用户无法访问该表(但对于这两个环境,它是同一个用户!)你怎么看?
我发现了这个问题。生产环境我是用admin
用户登录的,但是没有选择任何租户,所以我登录的是.
租户,如图
当前租户:未选择
在登录页面上。使用Default
租户(或任何工作租户)登录解决了问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句