Dapper multi-mapping illimité

c# dapper

Question

J'ai donc une situation où je dois joindre (et cartographier) plus de 7 entités (ce qui, à mes yeux, est la limitation actuelle de Dapper). C'est ce que j'ai jusqu'ici (pseudo code):

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

Y a-t-il un moyen de contourner cette limitation? Quelqu'un a fait face à ça avant? Certaines extensions Dapper peut-être?

Réponse acceptée

Actuellement, les deux seules façons de contourner ce problème sont les suivantes:

  • Créez une classe POCO avec les champs de votre choix et utilisez votre requête comme une table
  • Modifiez le code source de Dapper pour permettre davantage de mappages.

Réponse populaire

Il y a un PR fusionné sur ce sujet depuis septembre 2014:

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

Le PR a ajouté des méthodes où vous pouvez passer un tableau de types. Donc, la limitation à 7 entités n'existe plus sur ces méthodes.

Ceci est un test de code de la Repapper Dapper montrant comment utiliser l'une de ces nouvelles méthodes:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi