Me gustaría utilizar Dapper en una situación en la que la ejecución de un solo procedimiento almacenado devolverá 50 selecciones múltiples por separado, ninguno de los conjuntos de resultados individuales ser muy amplio, tal vez 20 o 30 columnas como máximo. El siguiente código es de Dapper Tests y me pregunto si este ejemplo es un buen prototipo para usar.Cómo mapear múltiples registros desde un único SP con Dapper-dot-net
Gracias, Stephen
public void TestMultiMap()
{
var createSql = @"
create table #Users (Id int, Name varchar(20))
create table #Posts (Id int, OwnerId int, Content varchar(20))
insert #Users values(99, 'Sam')
insert #Users values(2, 'I am')
insert #Posts values(1, 99, 'Sams Post1')
insert #Posts values(2, 99, 'Sams Post2')
insert #Posts values(3, null, 'no ones post')";
connection.Execute(createSql);
var sql = @"select * from #Posts p
left join #Users u on u.Id = p.OwnerId
Order by p.Id";
var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post; }).ToList();
var p = data.First();
p.Content.IsEqualTo("Sams Post1");
p.Id.IsEqualTo(1);
p.Owner.Name.IsEqualTo("Sam");
p.Owner.Id.IsEqualTo(99);
data[2].Owner.IsNull();
connection.Execute("drop table #Users drop table #Posts");
}
EDITAR
Este es un ejemplo basado en la respuesta de los orujos.
const string sql = @"__sp_GetMISMOLoanInfo";
using (var multi = _connection.QueryMultiple(sql, new { loannum = "3192381" }, commandType: CommandType.StoredProcedure))
{
var address = multi.Read<ADDRESS>().Single();
var amortizationRule = multi.Read<AMORTIZATION_RULE>().Single();
var appraiserLicense = multi.Read<APPRAISER_LICENSE>().Single();
var automatedUnderwriting = multi.Read<AUTOMATED_UNDERWRITING>().Single();
var avm = multi.Read<AVM>().Single();
var borrowerDetail = multi.Read<BORROWER_DETAIL>().Single();
}
¿Dónde está el SP? En particular, ¿es un resultado * ancho * o múltiples selecciones por separado? Ambos funcionan con dapper, pero la sintaxis es diferente entre los dos diseños –
(sé que era solo un ejemplo, pero una variable de tabla podría haber sido mejor en eso, por cierto) –
Marc, he editado la publicación para reflejar tus preguntas . –