私は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の保留中のトランザクションがデータベースから現在のレコードを見るのをブロックしている可能性があるかどうかはわかりません。私はこれをもう一度シミュレートしようとしていますが、今は常に必要なレコードを返すようになりました。
解明するために、文字列を返すデータ型として使用するには完璧な方法ですが、Queryメソッドへのsqlパラメータの単純な結合を行うか、返す列には別名を使用しないでください(すべての列がC#またはあなたは私のような文字列に向かっている列を持っている)。
正直言って、名前付きカラムを選択してそれを単純なstring
マッピングしているため、Dapperを正しく使用しているかどうかはわかりません。Dapperは '名前'プロパティを静かに失敗するとは思いません。私は強く型付けされたオブジェクトでQuery<T>
を試してみるか、 Query<dynamic>
を使って不要なクラスの作成を避けるべきだと思います。