2

我正在使用 .NET Core 和 SQLKata 来访问 SQL Server 数据库。我有一种方法可以使用 SQLKata.Execution.PaginationResult 从数据库中获取所有记录。

这是在存储库中:

public class MyTableRepository : IMyTableRepository
{
   private QueryFactory _db;
   public MyTableRepository(IConfiguration configuration)
   {
     var conn = new 
     SqlConnection(configuration.GetConnectionString("MyTable"));
     _db = new QueryFactory(conn, new SqlKata.Compilers.SqlServerCompiler());
   }

  public PaginationResult<MyModel> GetAll(int page = 0, int perPage = 25)
  {
    dbResult = _db.Query("MyTable").Paginate<MyModel>(page, perPage);
    return dbResult; 
  }

上面是从我的控制器调用的,如下所示:

    private readonly IMyTableRepository _MyTableRepository;
    public MyTableController(IMyTableRepository MyTableRepository)
    {
        _MyTableRepository = MyTableRepository;
    }
    [HttpGet]
    [Route("GetMyTable")]
    public List<MyModel> GetMyTable()
    {
        PaginationResult<MyModel> dbResult = MyTableRepository.GetAll(1, 
        25);
        List<MyModel> AccumResult = dbResult.List.ToList();
        while(dbResult.HasNext)    
        {       
            dbResult = dbResult.Next();
            AccumResult.AddRange(dbResult.List.ToList());
        }
        return AccumResult;  
    }

如何从 dbResult 获得下一组结果?

我在下面尝试,执行GetMyTable后,我执行GetNextMyTable,但是在PaginationResult GetNext()中,dbResult始终为null。

在控制器中:

    [HttpGet]
    [Route("GetNextMyTable")]
    public List<MyTable> GetNextMyTable()
    {
        var result = _MyTableRepository.GetNext().List;
        return result.ToList();
    }

在存储库中:

public PaginationResult<MyTable> GetNext()
{
  while(dbResult.HasNext)    //--->> dbResult is null
  {       
   dbResult = dbResult.Next();
   return dbResult; 
  }      
  return null;
}    

如果我在 Controller 中执行 Next 方法,我也会收到错误消息

private readonly IMyTableRepository _MyTableRepository;
private PaginationResult<SP_SMA_Reporting_Accts> dbResult;

[HttpGet]
[Route("GetMyTable")]
public List<MyModel> GetMyTable()
{
    var dbResult = _MyTableRepository.GetAll(1, 25).List;
    return dbResult.ToList();
}

[HttpGet]
[Route("GetNextMyTable")]
public List<MyTable> GetNextMyTable()
{
    var result = dbResult.Next().List;//->Error since dbResult is null
    return result.ToList();
}
4

1 回答 1

0

简而言之,重构您的存储库方法GetAll以调用db.Query

利用:

_db.Query("MyTable").Paginate<MyModel>(page, perPage);

代替

_db.Paginate<MyModel>(new Query("MyTable"), page, perPage);

说明:
在调用Next()方法时,PaginationResult将分页过程委托给持有查询,在您的情况下,由于您正在传递new Query()因此没有连接信息,因此您将获得空值。

于 2022-01-13T16:55:57.587 回答