Multi-mapping illimitato di Dapper

c# dapper

Domanda

Quindi ho una situazione in cui devo unire (e mappare) più di 7 entità (che per quanto vedo è l'attuale limite di Dapper). Questo è quello che ho ottenuto finora (pseudo codice):

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

C'è qualche modo per aggirare questa limitazione? Qualcuno ha affrontato questo prima? Alcune estensioni Dapper forse?

Risposta accettata

Attualmente gli unici due modi che conosco per aggirare questo è quello di

  • Crea una classe POCO con i campi che desideri e usa la tua query come una tabella
  • Modifica il codice sorgente di Dapper per consentire più mappature.

Risposta popolare

C'è un PR unito su questo argomento da settembre 2014:

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

I metodi aggiunti da PR in cui è possibile passare una serie di tipi. Quindi la limitazione a 7 entità non esiste più su questi metodi.

Questo è un codice test da Dapper Repo che mostra come utilizzare uno di questi nuovi metodi:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow