Dapper ¿Número de columna en lugar de columna?

.net dapper

Pregunta

Tengo una pregunta muy similar a Dapper-dot-net "sin nombre de columna" , pero la respuesta no me está llevando a donde necesito.

Estoy escribiendo una interfaz web y usando dapper para obtener datos de Procedimientos almacenados del sistema ERP de mi cliente. El SP devuelve 4 columnas de datos sin nombres de columna. Dicho esto, los SP están bloqueados y no puedo cambiarlos. Intenté solucionar esto utilizando una tabla temporal en mi consulta, como sugirió Sam.

var grid = QueryMultiple(@"set nocount on 
declare @t table(Id int, Name nvarchar(max), AnotherId int)

insert @t
exec proc

set nocount off 
select Id, Name from @t
select Id, AnotherId from @t
");

Sin embargo, ahora descubrí que el SP original también contiene una inserción para el registro y, por lo tanto, SQL no me permitirá insertar mi sp en una tabla temporal debido a esto.

Se menciona la adición de soporte para:

class Foo { [ColumnNumber(1)] public string Name {get;set;} }

¿Cómo puedo hacer esto? ¿Puede alguien señalarme en la dirección correcta para modificar la fuente de Dapper para que no requiera los nombres de las columnas y permitirme asignar por número de columna?

Respuesta aceptada

El problema de las vinculaciones no triviales sigue apareciendo; apareció más recientemente aquí: http://code.google.com/p/dapper-dot-net/issues/detail?id=108

Mi sugerencia es la siguiente, aunque todavía no he tenido tiempo de codificarla. Propongo un evento estático que puede elegir manejar y aplicar las asignaciones esotéricas que desee, es decir,

SqlMapper.ColumnBind += (sender, args) {
    int colIndex = args.ColumnIndex;
    Type type = args.TargetType;
    MemberInfo member = // ... Entirely up to you to define logic
    args.Member = member;
};

Lo anterior es completamente teórico, pero ¿satisfaría sus necesidades?

Nota: si ColumnBind no estaba suscrito, simplemente haría una asignación normal de nombres básicos como es normal. ¿Pensamientos?

(Nota: también podría ser un solo evento invocado por tipo, en lugar de por columna; eso podría ser más eficiente, ya que el suscriptor llamará GetProperties etc. con menos frecuencia)



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow