Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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_.net Core_Entity Framework Core_Aspnetboilerplate - Fatal编程技术网

C# 存储库仅在本地开发环境中获取数据

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

我有一个ASPNET样板项目,其中一个应用程序服务使用存储库访问数据库中的一些数据

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>>();
            //...
        }