Dapper:使用 <T> 从不同资源执行多个查询

Dapper: Using <T> to execute multiple queries from different resources

好的,所以我对如何在标题中表达它一无所知,所以我将在这里解释我想要实现的目标。

我有一个 .cs 文件,其中包含使用下面列出的 dapper 的连接代码。

namespace DBConnector
{

    public static class Helper
    {

        public static string CnnVal(string name)
        {
            return ConfigurationManager.ConnectionStrings[name].ConnectionString;
        }

    }

    public class DataAccess<T>
    {
        public List<T> GetInfo(string query, object parameters = null)
        {
            using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("ProxyRPDB")))
            {
                return connection.Query<T>(string, object);
            }
        }
    }
}

我想要实现的是通过上述代码从不同的 .cs 文件执行查询。但!我试图做到这一点,以便上面的代码接受来自多个 .cs 文件的查询执行,这些文件都需要来自不同表的不同数据。我一直在努力寻找信息……所以这确实是最后的手段。我正在为 .NET 4.5.2 使用 Dapper。

首先,我们需要修复GetInfo()方法中的基本语法错误:

public static class DataAccess
{
    public static IEnumerable<T> GetInfo<T>(string query, object parameters = null)
    {
        using (var connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("ProxyRPDB")))
        {
            return connection.Query<T>(query, parameters);
        }
    }
}

现在,假设您在其他 *.cs 文件中有正确的引用和使用指令,您可以在这些文件中执行如下操作:

var results = DataAccess.GetInfo<MyTableType>("SELECT * FROM [MyTable]");
foreach(var record in results)
{
  //...
}

Dapper 现在会尝试将查询结果映射到 MyTableType class 的实例,因此请确保您已经创建了这样的 class.

请注意,这适用于 IEnumerable 而不是 List。如果你真的需要一个列表(提示:你通常不需要,IEnumerable 可以表现得更好)你总是可以在函数调用的末尾放置一个 .ToList()

var results = DataAccess.GetInfo<MyTableType>("SELECT * FROM [MyTable]").ToList();