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;
}

当我尝试将“参数”传递给查询时,它告诉我“无法解析符号查询”。当我删除参数传递时,它工作正常。

谁能指出我正确的方向,以便我可以将动态参数(或类似的东西)传递给 Dapper?

4

2 回答 2

6

您只需将参数更改为类型对象,当您调用它时,您可以使用匿名类型来传递您的参数。

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 回答