2012-07-28 104 views
4

我有一個非常類似的問題Dapper-dot-net "no column name",但答案沒有讓我在我需要的地方。Dapper列號而不是列名?

我正在編寫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源不需要列名,並允許我按列號映射嗎?

回答

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沒有訂閱,它會照常進行正常的基本名稱映射。思考?

(注:也有可能是每個類型的單個事件調用,而不是每列;這可能是更有效,因爲用戶會調用GetProperties等較少)

+0

感謝馬克!是的,應該這樣做... – studiothat 2012-07-29 16:02:11

相關問題