我正在尝试编写一个通用的简洁服务方法,可以在提供连接字符串和表名称后从 SQL 表中获取所有数据。
我有以下 Dapper 服务代码。
dbConnectionString 让代码使用项目设置连接到数据库。
我已尝试以下操作,但缺少正确使用的结果类型或方法签名。
public class DapperService : IDapperService
{
private readonly string dbConnectionString;
public DapperService(IOptions<ProjectSettings> config)
{
dbConnectionString = config.Value.DbConnection;
}
public async List<T> GetTableData(string tableName, CommandType commondaType = CommandType.Text)
{
using IDbConnection db = new SqlConnection(dbConnectionString);
return await db.QueryAsync<T>(commandType: CommandType).toList();
}
是的,这里有两件事。首先,我们需要一个查询(假设您的提供商不支持“table direct”);
"select * from " + tableName
可能是一个好的开始,尽管如果表名是外来的,它可能需要转义,并且转义规则是特定于提供者的。您永远不应该接受用户输入的表名称,因为表名称无法参数化。
其次,我们需要在某个时刻知道
T
,因此 service 或 method 需要是通用的 - 即 DapperService<T>
或 GetTableData<T>
;我可能会选择该服务(包括界面,IDapperService<T>
) - 但最终这是你的选择。
或者,您可以单独提供,或者使用“Dapper.Contrib”之类的工具,它已经完成了大部分工作。