tutorial stored net framework espaƱol c# dapper

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"); }