3

私は現在、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に渡すことができるように、誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

6

paramをtypeobjectに変更するだけで、それを呼び出すときに匿名型を使用して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" });
于 2013-01-17T08:38:44.710 に答える
2

あなたはおそらくそれを捨てることができます:

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

私はその知恵を再び疑っていdynamicます; 理由があったことは知っていますが、それは善よりも害をもたらすのではないかと思います。率直に言って、dapperは問題なく動作しますobject(「理由」はIDEの問題であり、言語の問題ではありませんでした)。

于 2013-01-18T00:03:13.733 に答える