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);
}
Resultados en:¿Cómo se nombran las columnas para compatibilidad con múltiples mapas en Dapper?
'First (#1) in (#0)'
'Second (#2) in (#0)'
IdCategoría y tiene valores desde los siguientes
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 }
});
Resultados en:
'First (#1) in My Category (#10)'
'Second (#2) in My Category (#10)'
Estoy de conexión a una base de datos MySQL si eso tiene algo que ver con eso.
estás utilizando spliton correctamente allí, ¿te importa enviar una prueba fallida al rastreador en el código de google? –
@Sam Supongo que debería haber funcionado si hubiera cambiado ''CategoryName'' por' 'Name''? Tenía la impresión de que Dapper usaría alguna convención de Automapper para mapear '' CategoryName'' (también intenté '' Category.Name'') a 'x.Category.Name' – loraderon
, sí, tienes razón @loraderon, no agrega Categoría a todos los accesorios ... de hecho, es más simple manejar nombres de columnas duplicados en el conjunto de resultados. entonces puedes hacer cosas como 'select * from Posts p join Authors a on p.AuthorId = a.Id' que es tan sucinto –