5

Dapper-dot-net "no column name"と非常によく似た質問がありますが、必要な場所に答えがありません。

Web インターフェイスを作成し、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 を挿入できません。

次のサポートを追加することについて言及されています。

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

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

4

1 に答える 1

3

自明でないバインディングの問題が次々と出てきます。最近ここに出てきました: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がサブスクライブされていない場合は、通常の基本的な名前のマ​​ッピングが通常どおり行われます。考え?

(注:列ごとではなく、タイプごとに単一のイベント呼び出しにすることもできます。サブスクライバーがGetPropertiesetcを呼び出す頻度が少なくなるため、より効率的かもしれません)

于 2012-07-28T19:50:55.903 に答える