Problema de nombre de campo duplicado en una consulta de paginación de mapeos múltiples anidados

StackOverflow https://stackoverflow.com/questions/7415542

  •  30-10-2019
  •  | 
  •  

Pregunta

Me he encontrado con un problema al intentar hacer mapeo múltiple usando elegante, para consultas de paginación.

Debido a que estoy usando una consulta anidada en este escenario de paginación, hay varias tablas dentro de la consulta anidada que debo unirme para obtener mis datos mapeados, pero algunas de estas tablas compartirán algunos campos del mismo nombre que puede ver en Mi ejemplo de consulta a continuación (por ejemplo id, displayname y email):

q = @"select * from (select p.id, p.title, p.etc...,
u1.id, u1.displayname, u1.email,
u2.id, u2.displayname, u2.email,
t.id, t.name,
row_number() over (order by " + sort.ToPostSortSqlClause() + ") as rownum" +
" from posts p" +
" join users u1 on p.owneruserid = u1.id" +
" join users u2 on p.lastediteduserid = u2.id" +
" join topics t on p.topicid = t.id" +
") seq where seq.rownum between @pLower and @pUpper";

En el ejemplo anterior, puede ver que dentro de la consulta anidada, habrá problemas con los campos id (aparece en el posts mesa, ambos users se une a la mesa y al topics Tabla unirse), y también displayname y email (aparece en ambos users Se une la mesa).

La única solución en la que he pensado hasta ahora implica lanzar cada uno de estos campos de 'problema' como un nombre diferente, pero esto implica el proceso muy desordenado de crear propiedades ficticias en los modelos afectados, por lo que la multimapopación puede asignarlos y editar el Propiedades 'reales' en mis modelos para verificar también la propiedad ficticia en busca de un valor si el valor real no se ha establecido.

Además, en el escenario anterior, tendría que crear X propiedades ficticias donde X es el número de uniones que puedo tener en la misma tabla dentro de una consulta (en este ejemplo, 2 se unen en la misma tabla de usuarios, por lo tanto, requiere 2 ficticias con nombres de forma única. Propiedades solo para fines de mapeo de dapper).

Obviamente, esto no es ideal y estoy seguro de que tendría problemas y más desordenado a medida que creé más de estas consultas de paginación de mapeo múltiple.

Espero que haya una solución agradable y limpia para este problema.

No hay solución correcta

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