Dapper неограниченное мульти-картографирование

c# dapper

Вопрос

Поэтому у меня есть ситуация, когда мне приходится присоединяться (и отображать) более 7 объектов (что, насколько я вижу, является текущим ограничением Dapper). Это то, что у меня есть до сих пор (псевдокод):

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

Есть ли способ ограничить это ограничение? Кто-нибудь сталкивался с этим раньше? Возможно, некоторые расширения Dapper?

Принятый ответ

В настоящее время только два способа, которыми я знаю, это

  • Создайте класс POCO с нужными вами полями и используйте свой запрос как таблицу
  • Измените исходный код Dapper, чтобы разрешить больше сопоставлений.

Популярные ответы

С сентября 2014 года существует объединенный PR на эту тему:

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

PR добавил методы, где вы можете передать массив типов. Таким образом, ограничение на 7 объектов больше не существует в этих методах.

Это тест кода из Dapper Repo, показывающий, как использовать один из этих новых методов:

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow