Dapper列名ではなく列番号?

.net dapper

質問

私はDapper-dot-netに「列名なし」と非常によく似た質問がありますが、そこの答えは私が必要な場所に来ていません。

私はウェブインターフェースを作成していて、dapperを使ってクライアントのERPシステムからストアドプロシージャからデータを取得しています。 SPは列名を持たない4列のデータを返します。それは、SPはロックされており、私はそれらを変更することはできないと言われています。私はサムが提案したように私のクエリで一時テーブルを使用してこれを回避しようとしました。

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

しかし、私は今、元のSPにもロギング用の挿入が含まれていることを発見しました。そのため、SQLではspをtempテーブルに挿入することはできません。

以下のサポートを追加することに言及しています。

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

これどうやってするの?誰かがDapperのソースを変更して列名を必要とせず、列番号でマップできるように、正しい方向に向けることができますか?

受け入れられた回答

重要ではないバインディングの問題は今後も続きます。最近ここに登場しました: http : //code.google.com/p/dapper-dot-net/issues/detail?id=108

そこに私の提案がありますが、私はそれをまだコード化する時間がありませんでした。私はあなたが扱うことを選択できる静的イベントを提案し、あなたが望むどんな難解なマッピング、すなわち

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

上記は完全に理論的ですが、あなたのニーズを満たすでしょうか?

注: ColumnBindがサブスクライブされていない場合、通常のように通常の基本名マッピングが行われます。思考?

(注:サブスクリプGetPropertiesなどをあまり頻繁に呼び出さないため、カラムごとではなくタイプごとに1つのイベント呼び出しを行うこともできます)



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow