3

我有一个场景,我需要在Dapper中返回单个列作为多映射查询的一部分。

我已经简化了下面的示例,但本质上我想要检索的单列值(int)不是 Post 类的属性(而是在数据库表中)。

我想自己获取这个值,以类似于示例中的以下行的方式使用它,其中 status 是有问题的 int 值:

post.SetSomeStatus(status);

这是代码示例:

  var sql = 
    @"select *, p.Status from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

我看到此代码出现以下错误:Index was outside the bounds of the array

4

1 回答 1

0

错误的原因:索引超出了数组的范围是由于 Dapper 将查询响应的段拆分为在此示例中的返回参数 Post、User 和 int 之间分配的方式。Dapper 的约定是根据字段 ID 进行拆分,或者提供您自己的规则来使用splitOn参数拆分结果集。

为了使上面的例子工作:

  var sql = 
    @"select *, p.Status AS ID from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

我发现了另一个对我也有帮助的问题:Correct use of Multimapping in Dapper

于 2012-12-04T22:18:39.947 回答