Dapper列號而不是列名?

.net dapper

我對Dapper-dot-net“沒有列名”有一個非常相似的問題,但答案是沒有讓我到達我需要的地方。

我正在編寫一個Web界面,並使用dapper從我客戶的ERP系統中獲取存儲過程中的數據。 SP返回4列數據而沒有列名。據說SP被鎖定了,我無法改變它們。我試圖通過在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
");

但是,我現在發現原始SP還包含一個用於記錄的插入,因此SQL不允許我將我的sp插入到臨時表中。

提到添加支持:

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等)



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因