Dapper multi-mapping ilimitado

c# dapper

Pregunta

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 se enfrentó a esto antes? Algunas extensiones Dapper tal vez?

Respuesta aceptada

Actualmente, las únicas dos formas que conozco para solucionar esto es

  • Cree una clase POCO con los campos que desee y use su consulta como una tabla
  • Modifique el código fuente de Dapper para permitir más asignaciones.

Respuesta popular

Hay un PR fusionado sobre este tema desde septiembre de 2014:

https://github.com/StackExchange/Dapper/pull/158/files

Los métodos de PR añadieron donde puede pasar una variedad de tipos. Entonces la limitación a 7 entidades ya no existe en estos métodos.

Esta es una prueba de código de 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");
    }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow