乘豐 發表於 2026-1-21 17:51:00

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

<p>有时候不想使用EF等ORM框架,想要实现的功能也简单,就是获取一条或者多条记录,于是自己折腾了一个,代码如下:</p>
<pre><code>public class SqlFetch
{
    private readonly string _ConnectionString;
    /// &lt;summary&gt;
    /// 获取数据库连接字符串
    /// &lt;/summary&gt;
    /// &lt;param name="config"&gt;&lt;/param&gt;
    public SqlFetch(IConfiguration config)
    {
      _ConnectionString = config.GetSection(SectionConsts.ConnectionString).Get&lt;string&gt;()!;
    }
    /// &lt;summary&gt;
    /// 获取多条记录
    /// &lt;/summary&gt;
    /// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;
    /// &lt;param name="commandText"&gt;&lt;/param&gt;
    /// &lt;param name="func"&gt;&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public Task&lt;List&lt;T&gt;&gt; ToListAsync&lt;T&gt;(string commandText, Func&lt;IDataReader, T&gt; func) =&gt; ToListAsync(commandText, [], func);
    /// &lt;summary&gt;
    /// 获取多条记录,带参数
    /// &lt;/summary&gt;
    /// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;
    /// &lt;param name="commandText"&gt;&lt;/param&gt;
    /// &lt;param name="paras"&gt;&lt;/param&gt;
    /// &lt;param name="func"&gt;&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public async Task&lt;List&lt;T&gt;&gt; ToListAsync&lt;T&gt;(string commandText, List&lt;SqlParameter&gt; paras, Func&lt;IDataReader, T&gt; func)
    {
      var items = new List&lt;T&gt;();
      var cn = new SqlConnection(_ConnectionString);
      var cmd = cn.CreateCommand();
      cmd.CommandText = commandText;
      if (paras.Count &gt; 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;
    }
    /// &lt;summary&gt;
    /// 获取单条记录
    /// &lt;/summary&gt;
    /// &lt;typeparam name="T"&gt;&lt;/typeparam&gt;
    /// &lt;param name="commandText"&gt;&lt;/param&gt;
    /// &lt;param name="func"&gt;&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public async Task&lt;T?&gt; SingleOrDefaultAsync&lt;T&gt;(string commandText, Func&lt;IDataReader, T&gt; 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();

      }
    }
}

</code></pre>
<p>页面调用</p>
<pre><code>public async Task OnGet( SqlFetch sqlFetch)
{
   List&lt;ViewModelTest&gt; items = await sqlFetch.ToListAsync("select int1,nvarchar2 from databasename..tablename where whereCause",
          dr =&gt; new ViewModelTest(dr.GetInt32(0), dr.GetString(1)));
}

</code></pre>
<p>不知道算不算ORM。</p>
<p>不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。不知道算不算ORM。<br>
不知道算不算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。</p><br><br>
来源:https://www.cnblogs.com/catzhou/p/19513260
頁: [1]
查看完整版本: [.net10] 极简数据库对象关系映射