网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

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

时间:2026-01-21 17:51

人气:

作者:admin

标签:

导读:有时候不想使用EF等ORM框架,想要实现的功能也简单,就是获取一条或者多条记录,于是自己折腾了一个,代码如下: public class SqlFetch { private readonly string _ConnectionString; /// lt;summarygt;...

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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信