QueryMultiple
hỗ trợ khả năng đối phó với nhiều tập kết quả. Hạn chế thiết kế duy nhất mà chúng tôi đã thêm là vô hiệu hóa hoàn toàn bộ đệm cho trình đọc lưới. Điều này có nghĩa là toàn bộ API đang phát trực tuyến .
Trong trường hợp đơn giản nhất, bạn có thể sử dụng:
var grid = connection.QueryMultiple("select 1 select 2");
grid.Read<int>().First().IsEqualTo(1);
grid.Read<int>().First().IsEqualTo(2);
Trong trường hợp phức tạp hơn một chút, bạn có thể làm những điều điên rồ như sau:
var p = new DynamicParameters();
p.Add("a", 11);
p.Add("r", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
connection.Execute(@"create proc #spEcho
@a int
as
begin
select @a Id, 'ping' Name, 1 Id, 'pong1' Name
select @a Id, 'ping' Name, 2 Id, 'pong2' Name
return @a
end");
var grid = connection.QueryMultiple("#spEcho", p,
commandType: CommandType.StoredProcedure);
var result1 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
(a, b) => Tuple.Create((object)a, (object)b)).ToList();
var result2 = grid.Read<dynamic, dynamic, Tuple<dynamic, dynamic>>(
(a, b) => Tuple.Create((object)a, (object)b)).ToList();
((int)(result1[0].Item1.Id)).IsEqualTo(11);
((int)(result1[0].Item2.Id)).IsEqualTo(1);
((int)(result2[0].Item1.Id)).IsEqualTo(11);
((int)(result2[0].Item2.Id)).IsEqualTo(2);
p.Get<int>("r").IsEqualTo(11);
Bạn sẽ cần thêm điều này bằng câu lệnh để bật QueryMultiple.
using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */