我嘗試使用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
所以,我把它放在一邊去做其他事情,在我回來試圖解決我的問題之後,一切都運轉正常。我沒有改變我的代碼中的任何內容,令人驚訝的是它現在正在工作。
我不知道我的MiTeC Interbase Query中的待處理事務是否可能阻止我查看數據庫中的當前記錄。我嘗試再次模擬它,現在它總是返回我需要的記錄(比沒有更好,呵呵)。
為了澄清,使用字符串作為返回數據類型是完美的,可以在sql參數中簡單地連接到Query方法,或者根本不使用返回列的別名(僅當所有列都匹配您的C#屬性名稱時)或者你只有一個指向像我這樣的字符串的列。
說實話,我不確定你是否正確使用Dapper,因為你選擇了命名列並將其映射到簡單的string
- 我相信Dapper沒有看到'Name'屬性無聲地失敗。我猜你應該嘗試使用強類型對象的Query<T>
或使用Query<dynamic>
來避免不必要的類創建。