2013-01-17 56 views
3

我目前正在編寫Dapper的包裝過程。這個包裝器強制每個查詢都是一個存儲過程。Dapper通過動態參數

在我的包裝,我打電話短小精悍,像這樣(的問題):

public IEnumerable<T> Select<T>(string storedProcName, dynamic param) { 
    IEnumerable<T> results; 

    using(var connection = new SqlConnection(_connectionString) { 
     results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure); 
    } 

    return results; 
} 

當我嘗試「參數」傳遞給查詢,它告訴我「無法解析符號查詢。」當我刪除帕拉姆通行證時,它工作正常。

任何人都可以指向正確的方向,以便我可以將動態參數(或類似的東西)傳遞給Dapper?

回答

6

你只需要改變參數到類型對象,當你調用它時,你可以使用匿名類型來傳遞你的參數。

public IEnumerable<T> Select<T>(string storedProcName, object param) { 
    IEnumerable<T> results; 

    using(var connection = new SqlConnection(_connectionString) { 
     results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure); 
    } 

    return results; 
} 

那麼你會這樣稱呼它:

var results = query.Select<Entity>("spname", new { Id = 2, Something = "test" }); 
1

你或許可以只投它扔掉:

results = connection.Query<T>(storedProcName, 
    (object)param, commandType: CommandType.StoredProcedure); 

我再次懷疑是dynamic的智慧;我知道有一個原因,但我懷疑它會造成更多的傷害而不是好的。坦率地說,Dapper可以很好地與object一起工作(「原因」是IDE問題,而不是語言問題)。