我爲我的web應用程序使用asp.net mvc,dapper和MySql存儲過程。 到目前爲止,每個頁面都有1-3個存儲過程調用。 我最近發現我的主機只提供10個並行連接,所以我想將每個頁面的呼叫合併爲一個。 我已經在數據庫中做了必要的存儲過程,但我的問題是以通用方式使用dapper來獲取過程結果。通用短小精悍QueryMultiple函數
我想要的是使一個通用函數,將得到: 1)存儲過程的名稱。 2)存儲過程返回的類型列表。並且對於每個類型(如果它是Single/ToList)。 通用函數應該產生一個變量列表,這是存儲過程的結果。
在短小精悍的頁面的例子顯示瞭如何使非通用QueryMultiple電話:
var sql =
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";
using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
var customer = multi.Read<Customer>().Single();
var orders = multi.Read<Order>().ToList();
var returns = multi.Read<Return>().ToList();
...
}
基本上,我要的是插入的客戶,訂單,返回類型爲一個字典,註明每他們是單身或ToList,然後像做:
var result = new List<dynamic>();
var sql =
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";
using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
foreach(var item in dictionary)
{
if (item.Value.equals("Single"))
result.Add(multi.Read<item.Key>().Single());
else if (item.Value.equals("ToList"))
result.Add(multi.Read<item.Key>().ToList());
}
}
return result;
我的問題是,Visual Studio中說:
The type or namespace name 'item' could not be found
指向'項目':multi.Read()
我在做什麼錯了? 有沒有更好的方法來實現一個使用Dapper的QueryMultiple的泛型函數?
字典從不設置? – user3036342 2014-09-19 12:25:42
我不關注,你是什麼意思字典從來沒有設置? 錯誤是在調試期間而不是運行時。您的代碼爲: – shahaf 2014-09-19 12:27:41
:foreach項目在字典中。沒有數據被加載到字典中,所以項目不會被聲明,這意味着它不能被發現 – user3036342 2014-09-19 12:28:34