使用 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# 属性 名称或者您只有一列指向像我这样的字符串时。
我尝试使用 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# 属性 名称或者您只有一列指向像我这样的字符串时。