查看: 23|回覆: 0

[.net10] 极简数据库对象关系映射

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2012-3-30
發表於 2026-1-21 17:51:00 | 顯示全部樓層 |閲讀模式

有时候不想使用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。



来源:https://www.cnblogs.com/catzhou/p/19513260
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部