Pregunta

Tengo 3 tablas (categorías, artículos y categorías de article). Las categorías de article tienen una PK combinada y conciertos de:

  1. ArtemId (PK, FK, Int)
  2. CategoryID (PK, FK, Int)

Ahora, cuando estoy usando los métodos de paginación subsónica, me encuentro con un comportamiento muy extraño. Devuelve el doble de la cantidad de registros que espero (¿los 2 PK?). El problema se resuelve eliminando la paginación por completo o agregando un campo PK llamado articleCategoryID.

        SubSonic.Query qry = new SubSonic.Query(DAL.ArticleCategory.Schema);
        qry.AddWhere(DAL.ArticleCategory.Columns.CategoryID, filterid);

        //Pagesize
        qry.PageSize = Classes.Settings.PageSizes.GetAdminPageSize();

        //Pageindex
        if (pageindex > 0)
            qry.PageIndex = pageindex;
        else
            qry.PageIndex = 1;

El código anterior funciona para todas las demás tablas, pero falla con una relación de muchos a muchos. Podría recurrir a agregar el campo PK adicional (y único), pero eso no se siente bien.

Tal vez me estoy perdiendo algo obvio aquí, así que me disculpo de antemano :)

Gracias por tu tiempo saludos, Mark

¿Fue útil?

Solución

También puede leer la respuesta de Rob Conery en este Pregunta: se trata de Subsonic 3, pero como dice que Rob cree que una tabla de muchos a muchos debería tener una clave primaria de columna para identificar de manera única una fila en cualquier tabla, no creo que haya implementado el soporte de clave compuesto en Subsonic 2 .

Personalmente, siempre agrego una columna PK a las tablas de muchos a muchos porque simplifica mucho el código CRUD. Se siente bien para mí, y si puedes hacerlo, recomiendo hacerlo.

No pude encontrar la documentación oficial, pero también recuerdo (y tuve problemas ...) que siempre se debe usar una columna PK como la primera columna en una vista, de lo contrario, la paginación no funciona correctamente.

El problema de la paginación también puede depender de la versión de la base de datos. La implementación de la paginación con SQL Server 2000, por ejemplo, es un hack (variables de tabla, etc.) debido a la falta de instrucciones apropiadas en SQL Server. Las versiones posteriores de DB ofrecen mejores formas de implementar la paginación y pueden no depender de una sola columna PK.

Por último, no sobre esta pregunta, y nuevamente una preferencia personal: trato de evitar SubSonic.Query y use SubSonic.SQLQuery en cambio. SQLQuery se agregó más tarde y es mejor que la consulta (ver también esta pregunta)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top