C# 存储库仅在本地开发环境中获取数据
我有一个ASPNET样板项目,其中一个应用程序服务使用存储库访问数据库中的一些数据C# 存储库仅在本地开发环境中获取数据,c#,asp.net-core,.net-core,entity-framework-core,aspnetboilerplate,C#,Asp.net Core,.net Core,Entity Framework Core,Aspnetboilerplate,我有一个ASPNET样板项目,其中一个应用程序服务使用存储库访问数据库中的一些数据 public class AnAppService : AsyncCrudAppService<MyEntity, MyEntityDto, int, PagedAndSortedResultRequestDto, MyEntityDto, MyEntityDto>, IAnAppService { private readonly IRepository<UserTeam> _u
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();
[...]
}
}
}
你觉得这个怎么样
更新1:
我直接执行SQL查询只是为了检查它是否可能是样板文件的问题或其他问题。这是我运行的代码(使用相同的方法)
数据是被提取的,我没有用户数据的空值。ASPNET样板、实体框架核心和SQL引擎之间似乎出现了一些分歧。你有什么线索吗
更新2:
我正在考虑用户
实体的读取操作的权限问题,因此我检查了以下内容:
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();
[...]
}
}
}
公共类AnAppService:AsyncCrudapService,IAnAppService
{
私有只读IRepository\u用户存储;
公共护理服务(IRepository repository,
IRepository用户团队存储库)
:base(存储库)
{
_userTeamRepository=userTeamRepository;
}
公共覆盖任务创建(MyEntityDto输入)
{
[...]
var users=_usersRepository.GetAll();
[...]
}
}
}
在这里,我使用User
实体上的一个简单存储库来读取所有用户。嗯,虽然在开发机器上我可以获取所有用户,但在部署机器上只返回admin
用户。在这两种情况下,我都是使用admin
用户登录的。
我认为,UserTeam
存储库没有获取非空用户,因为出于某种原因,User
表不能被登录的用户访问(但这两个环境都是同一个用户!)
你觉得怎么样 问题在于您试图以错误的方式访问DbContext。此外,您不应该从DbContext检索用户列表。您必须使用已注入的存储库
public override Task<MyEntityDto> Create(MyEntityDto input)
{
//...
var uteams = _userTeamsRepository.GetAllIncluding(x=>x.User).Where(ut => ut.Team.Id == teamId).ToList();
//and you need to map uteams to your DTO list.
//var uteamsDto = uteams.MapTo<List<MyTeamDto>>();
//...
}
公共覆盖任务创建(MyEntityDto输入)
{
//...
var uteams=_userTeamsRepository.GetAllIncluding(x=>x.User).Where(ut=>ut.Team.Id==teamId.ToList();
//您需要将uteams映射到DTO列表。
//var uteamsDto=uteams.MapTo();
//...
}
请参阅和。我发现了问题。在生产环境中,我使用
管理员
用户登录,但没有选择任何租户,因此我登录到
租户,如图所示
当前租户:未选择
在登录页面上。
使用
默认值登录
租户(或任何工作租户)修复了我有此类列表的问题:[null,null,null,null,…]
。IIS服务器上的项目数等于开发环境中的项目数。
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();
[...]
}
}
}
public override Task<MyEntityDto> Create(MyEntityDto input)
{
//...
var uteams = _userTeamsRepository.GetAllIncluding(x=>x.User).Where(ut => ut.Team.Id == teamId).ToList();
//and you need to map uteams to your DTO list.
//var uteamsDto = uteams.MapTo<List<MyTeamDto>>();
//...
}