跳过并且不使用MySQL EntityFrameworkCore

abd*_*dul 6 c# mysql entity-framework-core

我试图Products从MySQL数据库分页,但如果我使用Skip()Take()它返回一个空的Json数组作为我的web api响应像这样

[]
Run Code Online (Sandbox Code Playgroud)

但是扩展方法,如FirstOrDefault(),Where()...工作正常.这是代码片段:

public IActionResult GetPage(int page, int pageSize = 2)
{            
    int productCount = _context.Products.Count(); // 5
    float totalPages = (float)Math.Ceiling((float)productCount / pageSize); //2.5 -- round to 3

    if (page < 1 || page > totalPages) return NotFound();
    var products = _context.Products.Skip((page - 1) * pageSize).Take(pageSize); //skip & take err mysql ef

    return Ok(products);
}
Run Code Online (Sandbox Code Playgroud)

我甚至.Skip(1).Take(2)没有运气地硬编码查询.有人遇到过这个问题或者知道解决方法吗?

abd*_*dul 8

原来这MySql.Data是Oracle提供的EF连接器中的一个错误,错误详细信息发布在这里.

替代方案:

我改叫另一个连接器,现在SkipTake工作完全正常.您可以搜索nuget Pomelo.EntityFrameworkCore.MySql并为您的项目安装适当的版本.

要使用,只需更改.UseMySQL.UseMySql配置时DbContext,因为oracle连接器使用SQL和pomelo Sql只使用套管不同.

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
Run Code Online (Sandbox Code Playgroud)