Я использую asp.net mvc, dapper и MySql хранимые процедуры для своего веб-приложения. До сих пор для каждой страницы у меня было 1-3 вызова хранимых процедур. Недавно я узнал, что мой хостинг предоставляет только 10 параллельных подключений, поэтому я хочу совместить свои звонки на одну страницу. Я уже сделал необходимые хранимые процедуры в базе данных, но моя проблема заключается в использовании dapper в общем виде для получения результатов процедур.Generic dapper QueryMultiple function
Я хочу создать общую функцию, которая получит: 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;
Моя проблема, визуальная студия говорит:
The type or namespace name 'item' could not be found
Указание на «товар» в: multi.Read()
Что я делаю неправильно? Есть ли лучший способ реализовать универсальную функцию, использующую QueryMultiple dapper?
словарь не установлен? – user3036342
i dont follow, что вы подразумеваете, словарь никогда не устанавливается? ошибка во время отладки не выполняется. – shahaf
Ваш код читает: foreach item в словаре. Никакие данные никогда не загружаются в словарь, поэтому элемент никогда не будет объявлен, что означает, что его невозможно найти – user3036342