我尝试使用dapper执行以下查询,但它始终返回空结果集。首先,我尝试删除WHERE
子句以隔离问题,但这不起作用。之后,我在C.NAME
子句中的SELECT
列中添加了别名,但也没有用。
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
答案 0 :(得分:1)
说实话,我不确定你是否正确使用Dapper,因为你选择了命名列并将其映射为简单的string
- 我相信Dapper并没有看到&#39; Name&#39;财产无声地失败。我想你应该尝试使用强类型对象Query<T>
或使用Query<dynamic>
来避免不必要的类创建。
答案 1 :(得分:1)
所以,我把它放在一边去做其他事情,在我回来试图解决我的问题之后,一切都运转正常。我没有改变我的代码中的任何内容,令人惊讶的是它现在正在工作。
我不知道我的MiTeC Interbase Query中的待处理事务是否可能阻止我查看数据库中的当前记录。我试着再次模拟它,现在它总是返回我需要的记录(比没有更好,呵呵)。
为了澄清,将字符串用作返回数据类型是完美的,可以在sql参数中简单地连接到Query方法,或者根本不使用返回列的别名(仅当所有列都匹配时) C#属性名称或者您只有一个指向像我这样的字符串的列。