c# - stored - idbconnection dapper
Dapper ilimitado multi-mapeo (2)
Así que tengo una situación en la que tengo que unirme (y mapear) más de 7 entidades (que por lo que veo es la limitación actual de Dapper). Esto es lo que tengo hasta ahora (pseudo código):
using (var connection = new SqlConnection(_connectionString)) {
IEnumerable<BigEntity> results =
connection.Query<BigEntity, Lookup1, Lookup2, ... around 10 of them>(sql,
(b, l1, l2, l3) => {
// map and return here
},
splitOn: "split1, split2 ...");
}
¿Hay alguna forma de evitar esta limitación? ¿Alguien ha enfrentado esto antes? Algunas extensiones Dapper tal vez?
Actualmente, las únicas dos formas que conozco para solucionar esto es
- Cree una clase POCO con los campos que desea y use su consulta como una tabla
- Modifique el código fuente de Dapper para permitir más asignaciones.
Hay un PR fusionado sobre este tema a partir de septiembre de 2014:
https://github.com/StackExchange/Dapper/pull/158/files
Los PR añadieron métodos donde puedes pasar una matriz de Tipos. Entonces la limitación a 7 entidades ya no existe en estos métodos.
Esta es una prueba de código del Dapper Repo que muestra cómo usar uno de estos nuevos métodos:
public async Task TestMultiMapArbitraryWithSplitAsync()
{
const string sql = @"select 1 as id, ''abc'' as name, 2 as id, ''def'' as name";
var productQuery = await connection.QueryAsync<Product>(sql, new[] { typeof(Product), typeof(Category) }, (objects) => {
var prod = (Product)objects[0];
prod.Category = (Category)objects[1];
return prod;
});
var product = productQuery.First();
// assertions
product.Id.IsEqualTo(1);
product.Name.IsEqualTo("abc");
product.Category.Id.IsEqualTo(2);
product.Category.Name.IsEqualTo("def");
}