C# 简洁无限制多重映射

C# 简洁无限制多重映射,c#,dapper,C#,Dapper,因此,我不得不加入(并映射)7个以上的实体(据我所知,这是Dapper当前的限制)。 这是我到目前为止得到的(伪代码): 使用(var连接=新的SqlConnection(_connectionString)){ IEnumerable结果= connection.Query(sql, (b,l1,l2,l3)=>{ //绘制地图并返回此处 }, 斯普利顿:“斯普利特1,斯普利特2…”); } 有没有办法绕过这个限制?以前有人面对过这种情况吗?也许有一些简洁的扩展?目前我知道解决这个问题的唯一

因此,我不得不加入(并映射)7个以上的实体(据我所知,这是Dapper当前的限制)。 这是我到目前为止得到的(伪代码):

使用(var连接=新的SqlConnection(_connectionString)){
IEnumerable结果=
connection.Query(sql,
(b,l1,l2,l3)=>{
//绘制地图并返回此处
},
斯普利顿:“斯普利特1,斯普利特2…”);
}

有没有办法绕过这个限制?以前有人面对过这种情况吗?也许有一些简洁的扩展?

目前我知道解决这个问题的唯一两种方法是

  • 创建一个具有所需字段的POCO类,并像使用表一样使用查询
  • 修改Dapper的源代码以允许更多映射

从2014年9月起,该主题有一个合并的PR:

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");
    }
public异步任务testmultimapararitywithsplitasync()
{
常量字符串sql=@“选择1作为id,选择abc作为名称,选择2作为id,选择def作为名称”;
var productQuery=wait connection.querySync(sql,new[]{typeof(Product),typeof(Category)},(objects)=>{
var prod=(产品)对象[0];
产品类别=(类别)对象[1];
返回产品;
});
var product=productQuery.First();
//断言
产品Id.IsEqualTo(1);
产品名称IsEqualTo(“abc”);
产品类别Id.IsEqualTo(2);
产品。类别。名称。IsEqualTo(“def”);
}

修改整洁不应该是这样hard@talles不,没那么难,你说得对。不过,我希望它是官方的,而不是我自己的修补版Dapper。有关于这个问题的更新吗?我们讨论的是同一个问题:-(~Hejo@Hejo如果有帮助的话,我最后添加了一个新的(包装器)POCO包含我需要的所有字段并映射到它。我感谢您的回答+1。但是,这听起来像个混蛋,这不是一个很好的答案。我问这个问题的全部原因是为了不必修改整洁或创建包装POCO。干杯。完全可以理解:)我可能应该在这篇文章的开头说,我对这篇文章做了大量的研究,其他人也有类似的问题,这是系统中的一个硬限制,人们提出了拉取请求,要求提供这个确切的功能。我找不到任何像你正在寻找的东西,当我需要它的要求。很抱歉
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");
    }