Dapper Spaltennummer statt Spaltenname?

.net dapper

Frage

Ich habe eine sehr ähnliche Frage an Dapper-dot-net "no column name" , aber die Antwort gibt mir nicht, wo ich brauche.

Ich schreibe eine Webschnittstelle und verwende dapper, um Daten von Stored Procedures aus dem ERP-System meines Kunden zu erhalten. Der SP gibt 4 Spalten mit Daten ohne Spaltennamen zurück. Davon abgesehen sind die SPs gesperrt und ich kann sie nicht ändern. Ich habe versucht, dies zu umgehen, indem ich eine temporäre Tabelle in meiner Abfrage verwendet, wie Sam vorgeschlagen hat.

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
");

Allerdings habe ich jetzt entdeckt, dass das Original-SP auch ein Insert zum Loggen enthält und deshalb erlaubt mir SQL nicht, mein sp in eine temporäre Tabelle einzufügen.

Es wird erwähnt, dass Unterstützung hinzugefügt wird für:

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

Wie kann ich das machen? Kann mir jemand in die richtige Richtung weisen, die Dapper-Quelle zu ändern, um keine Spaltennamen zu benötigen, und mir erlauben, nach Spaltennummer zu mappen?

Akzeptierte Antwort

Das Problem der nicht-trivialen Bindungen kommt immer wieder auf. es kam zuletzt hier: http://code.google.com/p/dapper-dot-net/issues/detail?id=108

Mein Vorschlag steht dort, obwohl ich noch keine Zeit hatte, ihn zu programmieren. Ich schlage ein statisches Ereignis vor, das Sie wählen können, und wenden Sie alle esoterischen Zuordnungen an, die Sie wünschen, dh

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

Das obige ist völlig theoretisch, aber würde es Ihre Bedürfnisse erfüllen?

Hinweis: Wenn ColumnBind nicht abonniert ist, wird die normale ColumnBind wie üblich durchgeführt. Gedanken?

(Hinweis: Es könnte auch ein einzelner Ereignisaufruf pro Typ und nicht pro Spalte sein; dies könnte effizienter sein, da der Abonnent GetProperties usw. weniger oft GetProperties )



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum