var sql = @"SELECT
a.id AS `Id`,
a.thing AS `Name`,
b.id AS `CategoryId`,
b.something AS `CategoryName`
FROM ..";
var products = connection.Query<Product, Category, Product>(sql,
(product, category) =>
{
product.Category = category;
return product;
},
splitOn: "CategoryId");
foreach(var p in products)
{
System.Diagnostics.Debug.WriteLine("{0} (#{1}) in {2} (#{3})", p.Name, p.Id, p.Category.Name, p.Category.Id);
}
risultati in:Come denominare le colonne per il supporto multi mapping in Dapper?
'First (#1) in (#0)'
'Second (#2) in (#0)'
CategoryId e NomeCategoria ha valori in quanto le seguenti
var products = connection.Query(sql).Select<dynamic, Product>(x => new Product
{
Id = x.Id,
Name = x.Name,
Category = new Category { Id = x.CategoryId, Name = x.CategoryName }
});
risultati in:
'First (#1) in My Category (#10)'
'Second (#2) in My Category (#10)'
Sto collegano a un database MySQL se questo ha qualcosa a che fare con questo.
si sta utilizzando spliton correttamente lì, ti dispiace inviare un test rotto al tracker in google code? –
@Sam Immagino che avrebbe dovuto funzionare se avessi cambiato ''CategoryName'' in" Nome "? Ho avuto l'impressione che Dapper usasse alcune convenzioni di automapper per mappare ''CategoryName'' (ha anche provato'' Category.Name'') a 'x.Category.Name' – loraderon
yeah hai ragione @loraderon, non aggiunge Categoria per tutti gli oggetti di scena ... in realtà è più semplice solo per gestire i nomi di colonne duplicati nel set di risultati. quindi puoi fare cose come 'select * da Posts p join Authors a su p.AuthorId = a.Id' che è così succinta –