Comment mapper plusieurs enregistrements à partir d'un seul SP avec Dapper-dot-net
Je voudrais utiliser Pimpante dans une situation où l'exécution d'une procédure stockée unique sera de retour 50 multiples séparées sélectionne, aucun des ensembles de résultats sera très large, peut-être 20 ou 30 colonnes au plus. Le code ci-dessous est à partir de la Dapper Tests et je me demandais si cet exemple est un bon modèle à utiliser.
Merci,
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");
}
MODIFIER
Voici un échantillon à partir de Marcs de réponse.
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();
}
source d'informationauteur Stephen Patten
Vous devez vous connecter pour publier un commentaire.
C'est à partir de la page d'accueil, mais il devrait être similaire dans les tests:
Arguments de travail, etc comme d'habitude, et devrait directement la carte pour définir les noms de paramètre si CommandType est spécifié.
Chaque appel à
.Read<T>()
se rapporte à des résultats successifs de la grille.