Dapper怎么返回一个DataSet Dapper填充DataSet方法

admin 百科 13
Dapper不支持返回DataSet,因其设计聚焦于高效SQL执行与强类型对象映射,刻意省略DataAdapter/DataSet等重量级抽象;可通过复用IDbConnection配合原生DataAdapter.Fill()实现,或封装扩展方法桥接,但推荐优先使用Query或GridReader等现代方式。

Dapper怎么返回一个DataSet Dapper填充DataSet方法-第1张图片-佛山资讯网

Dapper 本身不直接支持返回 DataSet,因为它是一个轻量级 ORM,专注于快速执行 SQL 并映射到强类型对象(如 List<t></t> 或单个实体),而不是 ADO.NET 的传统数据容器(如 DataSetDataTable)。

为什么 Dapper 不提供 FillDataSet 方法

Dapper 的设计哲学是“只做一件事,并把它做好”——高效执行 SQL + 对象映射。它绕过了 DataAdapterDataSet 这类较重的抽象层,因此没有内置的 FillDataSet() 或类似扩展方法。

如何用 Dapper 配合 ADO.NET 填充 DataSet

你可以手动使用 Dapper 获取 IDbConnection,再结合原生 ADO.NET 的 DataAdapter.Fill() 来填充 DataSet。关键点是:复用连接、避免重复打开/关闭。

  • 确保连接已打开(Dapper 不自动管理连接状态,需自己控制)
  • 用同一个连接创建 DataAdapter(如 SqlDataAdapter
  • 调用 Fill() 方法填充 DataSet

示例(SQL Server):

using (var connection = new SqlConnection(connectionString))
{
    connection.Open(); // 必须显式打开
<pre class="brush:php;toolbar:false;">var dataSet = new DataSet();
using (var adapter = new SqlDataAdapter("SELECT * FROM Users; SELECT * FROM Orders;", connection))
{
    adapter.Fill(dataSet); // 自动创建两个 DataTable
}

// dataSet.Tables[0] → Users  
// dataSet.Tables[1] → Orders

登录后复制

}

如果坚持用 Dapper 语法风格封装 FillDataSet

可以自己写一个简单扩展方法,把连接和 SQL 封装起来,让调用更接近“Dapper 风格”:

标签: app 工具 win .net 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~