ダイナミックパラメータを渡すDapper

c# dapper orm

質問

私は現在、Dapperのラッパーを作成中です。このラッパーは、すべての照会をストアード・プロシージャーにします。

私のラッパーでは、私はDapperにそう言っている(問題あり)。

public IEnumerable<T> Select<T>(string storedProcName, dynamic param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

    return results;
}

クエリに「param」を渡そうとすると、「シンボルクエリを解決できません」というメッセージが表示されます。 param passを削除すると、正常に動作します。

誰も私に正しい方向に向けることができるので、Dapperに動的なパラメータ(またはそのようなもの)を渡すことができますか?

受け入れられた回答

paramを型オブジェクトに変更するだけで済みます。呼び出すときには、匿名型を使用してパラメータを渡すことができます。

public IEnumerable<T> Select<T>(string storedProcName, object param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

    return results;
}

それで、あなたはこれを次のように呼ぶでしょう:

var results = query.Select<Entity>("spname", new { Id = 2, Something = "test" });

エキスパート回答

あなたはおそらくそれを離れてキャストすることができます:

results = connection.Query<T>(storedProcName,
    (object)param, commandType: CommandType.StoredProcedure);

私はそれの知恵を再疑うよdynamic 。私は理由があったことを知っていますが、私はそれが良いよりも害を引き起こすと考えています。率直に言って、dapperはobjectうまく動作しobject (「理由」はIDEの問題であり、言語の問題ではありませんでした)。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ