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の拡張機能は?

受け入れられた回答

現在、これを回避するために私が知っている唯一の2つの方法は、

  • 必要なフィールドを持つPOCOクラスを作成し、テーブルのようにクエリを使用する
  • より多くのマッピングを可能にするためにDapperのソースコードを変更する。

人気のある回答

2014年9月からこのトピックについての統合された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