Il numero di colonna Dapper anziché il nome della colonna?

.net dapper

Domanda

Ho una domanda molto simile a Dapper-dot-net "nessun nome di colonna" , ma la risposta non mi sta ottenendo dove mi serve.

Sto scrivendo un'interfaccia web e usando dapper per ottenere dati da Stored Procedures dal sistema ERP del mio cliente. L'SP restituisce 4 colonne di dati senza nomi di colonne. Detto questo, gli SP sono bloccati e non posso cambiarli. Ho cercato di aggirare questo problema utilizzando una tabella temporanea nella mia query, come suggerito da 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
");

Tuttavia, ho scoperto che l'originale SP contiene anche un inserto per la registrazione e quindi SQL non mi permetterà di inserire il mio sp in una tabella temporanea a causa di questo.

C'è menzione di aggiungere il supporto per:

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

Come posso fare questo? Qualcuno può indicarmi la giusta direzione per modificare la sorgente di Dapper per non richiedere i nomi delle colonne e consentirmi di mappare per numero di colonna?

Risposta accettata

Il problema dei binding non banali continua a venire; è arrivato più di recente qui: http://code.google.com/p/dapper-dot-net/issues/detail?id=108

Il mio suggerimento è valido, anche se non ho ancora avuto il tempo di codificarlo. Propongo un evento statico che puoi scegliere di gestire e applicare qualsiasi mappatura esoterica che desideri, ad es

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

Quanto sopra è interamente teorico, ma risponderebbe alle vostre esigenze?

Nota: se ColumnBind non fosse iscritto, farebbe normalmente il normale mapping dei nomi di base. Pensieri?

(nota: potrebbe anche essere un singolo evento invocato per tipo, piuttosto che per colonna, che potrebbe essere più efficiente, in quanto l'abbonato chiamerà GetProperties ecc meno spesso)



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché