paginacion pagelist net mvc example data asp asp.net-mvc sql-server-2008 paging entity-framework-core

asp.net-mvc - pagelist - pagination mvc 5



PaginaciĆ³n con Entity Framework 7 y SQL Server 2008 (6)

Estoy tratando de usar la paginación (es decir .Skip(...).Take(...) en Entity Framework 7. Funciona bien con Microsoft SQL Server 2012 y 2014, pero falla con el siguiente error en SQL Server 2008 :

System.Data.SqlClient.SqlException (0x80131904): Sintaxis incorrecta cerca de ''OFFSET''. Uso no válido de la opción NEXT en la instrucción FETCH.

Me he dado cuenta de que es un cambio importante en la versión 6.1.2 de EF ( http://erikej.blogspot.com/2014/12/a-breaking-change-in-entity-framework.html ). Pero la solución es modificar el archivo EDMX configurando el atributo ProviderManifestToken a "2008".

El problema es que EF7 actualmente solo admite el escenario de código primero, por lo tanto, no hay ningún EDMX por ahí. La pregunta es: ¿cómo configurar el sitio web ASP.NET 5 con Entity Framework 7 para usar el enfoque de paginación de reserva para SQL Server anterior a 2012?


Aquí, simplemente configure UseRowNumberForPaging() en ConfigureServices

services.AddDbContext<CallcContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Connectionstring"),opt=> { opt.UseRowNumberForPaging(); }));



Me encontré con este problema usando EF 7 y el servidor sql 2008. Afortunadamente, en la última versión rc1 de EF 7, puede resolverlo usando .UseRowNumberForPaging () como se muestra en este ejemplo:

services.AddEntityFramework() .AddSqlServer() .AddDbContext<YourDbContext>(options => options.UseSqlServer(configuration["Data:DefaultConnection:ConnectionString"]) // this is needed unless you are on mssql 2012 or higher .UseRowNumberForPaging() );


Necesitas usar algo como esto:

var MinPageRank = (pageIndex - 1) * pageSize + 1; var MaxPageRank = (pageIndex * pageSize); var person = _context.Person.FromSql($"SELECT * FROM (SELECT [RANK] = ROW_NUMBER() OVER (ORDER BY Surname),* FROM Person) A WHERE A.[RANK] BETWEEN {MinPageRank} AND {MaxPageRank}").ToList(); IQueryable<Person> PersonIQ = from s in person.AsQueryable() select s; Person = await PaginatedList<Person>.CreateAsync(PersonIQ .AsNoTracking(), pageIndex ?? 1, pageSize, sourceFull);



MyDbConnectionString es una cadena de conexión de cualquier fuente

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(_config["MyDbConnectionString"], options=> { options.UseRowNumberForPaging(); }); }

UseRowNumberForPaging() solucionó el problema en cualquier caso, excepto en el caso del escenario edmx.