使用 Dapper 使用 JOIN 子句查询总是 returns 空结果集

Query with JOIN clause always returns a empty result set using Dapper

我尝试使用 dapper 执行以下查询,但它总是返回一个空结果集。首先,我试图删除 WHERE 子句以隔离问题,但这没有用。之后,我在 SELECT 子句的 C.NAME 列中添加了一个别名,但也没有用。

private const string SelectClaims =
 @"SELECT C.NAME FROM CLAIMS C 
  INNER JOIN USERS_CLAIMS UC ON C.ID = UC.ID_CLAIM 
  WHERE UC.ID_USER = @Id";

using (var conn = new FbConnection(connectionString))
{
    var claims = conn.Query<string>(SelectClaims, new { user.Id });
    return claims;
}

如果我在这里替换上面的查询,一切正常:

SELECT NAME FROM CLAIMS

老实说,我不确定您是否正确使用了 Dapper,因为您正在选择命名列并将其映射到简单 string - 我相信 Dapper 看不到 'Name' 属性 无声无息地失败了。我想你应该尝试使用强类型对象 Query<T> 或使用 Query<dynamic> 来避免不必要的 class 创建。

所以,我把这个放在一边去做其他事情,在我回来尝试解决我的问题后一切正常。我没有更改我的代码中的任何内容,令人惊讶的是它现在可以正常工作了。

我不知道我的 MiTeC Interbase 查询中的未决事务是否可能阻止我查看数据库中的当前记录。我尝试再次模拟它,现在它总是返回我需要的记录(总比没有好,呵呵)。

为了澄清,使用字符串作为返回数据类型是完美的,在 sql 参数中对查询方法进行简单的连接,或者根本不对返回列使用别名 (仅当所有列都匹配您的 C# 属性 名称或者您只有一列指向像我这样的字符串时。