有时候不想使用EF等ORM框架,想要实现的功能也简单,就是获取一条或者多条记录,于是自己折腾了一个,代码如下:

public class SqlFetch
{
    private readonly string _ConnectionString;
    /// <summary>
    /// 获取数据库连接字符串
    /// </summary>
    /// <param name="config"></param>
    public SqlFetch(IConfiguration config)
    {
        _ConnectionString = config.GetSection(SectionConsts.ConnectionString).Get<string>()!;
    }
    /// <summary>
    /// 获取多条记录
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="commandText"></param>
    /// <param name="func"></param>
    /// <returns></returns>
    public Task<List<T>> ToListAsync<T>(string commandText, Func<IDataReader, T> func) => ToListAsync(commandText, [], func);
    /// <summary>
    /// 获取多条记录,带参数
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="commandText"></param>
    /// <param name="paras"></param>
    /// <param name="func"></param>
    /// <returns></returns>
    public async Task<List<T>> ToListAsync<T>(string commandText, List<SqlParameter> paras, Func<IDataReader, T> func)
    {
        var items = new List<T>();
        var cn = new SqlConnection(_ConnectionString);
        var cmd = cn.CreateCommand();
        cmd.CommandText = commandText;
        if (paras.Count > 0)
            cmd.Parameters.AddRange(paras.ToArray());
        await cn.OpenAsync();
        var dr = await cmd.ExecuteReaderAsync();


        while (await dr.ReadAsync())
            items.Add(func(dr));
        await dr.CloseAsync();
        await cn.CloseAsync();

        return items;
    }
    /// <summary>
    /// 获取单条记录
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="commandText"></param>
    /// <param name="func"></param>
    /// <returns></returns>
    public async Task<T?> SingleOrDefaultAsync<T>(string commandText, Func<IDataReader, T> func)
    {
        var cn = new SqlConnection(_ConnectionString);
        var cmd = cn.CreateCommand();
        cmd.CommandText = commandText;
        await cn.OpenAsync();
        var dr = await cmd.ExecuteReaderAsync();


        try
        {
            if (await dr.ReadAsync())
                return func(dr);
            else
                return default;

        }
        finally
        {
            await dr.CloseAsync();
            await cn.CloseAsync();

        }
    }
}

页面调用

  public async Task OnGet([FromServices] SqlFetch sqlFetch)
  {
     List<ViewModelTest> items = await sqlFetch.ToListAsync("select int1,nvarchar2 from databasename..tablename where whereCause",
          dr => new ViewModelTest(dr.GetInt32(0), dr.GetString(1)));
  }

不知道算不算ORM。

不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。
不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。