`Dapper` 是一个轻量级的 .NET ORM(对象关系映射)库

57 阅读2分钟

Dapper 是一个轻量级的 .NET ORM(对象关系映射)库,由 Stack Overflow 团队开发。它以极高的性能和简单的 API 著称,适合需要直接编写 SQL、追求高效数据访问的场景。Dapper 通过扩展方法将 SQL 查询结果快速映射为 C# 对象,常用于微服务、数据访问层等。

主要特点:

  • 性能接近原生 ADO.NET
  • 支持参数化查询,防止 SQL 注入
  • 自动将查询结果映射为实体对象或集合
  • 支持多表查询、存储过程、事务等
  • 语法简洁,易于集成

用法举例

假设有如下实体类和数据库表:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

查询示例

using Dapper;
using System.Data.SqlClient;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string connStr = "Server=localhost;Database=TestDb;Trusted_Connection=True;";
        using var connection = new SqlConnection(connStr);

        // 查询所有用户
        IEnumerable<User> users = connection.Query<User>("SELECT Id, Name FROM Users");

        foreach (var user in users)
        {
            Console.WriteLine($"Id: {user.Id}, Name: {user.Name}");
        }
    }
}

插入示例

using Dapper;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connStr = "Server=localhost;Database=TestDb;Trusted_Connection=True;";
        using var connection = new SqlConnection(connStr);

        var newUser = new User { Name = "张三" };
        string sql = "INSERT INTO Users (Name) VALUES (@Name)";
        connection.Execute(sql, newUser);
    }
}

说明:

  • 只需一行代码即可完成查询和映射。
  • 支持参数化,安全高效。
  • 适合需要灵活 SQL 和高性能的数据访问场景。

更多用法可参考官方文档:Dapper 官网

下面演示在 ASP.NET Core Web API 项目中使用 Dapper 进行简单的数据访问(以 SQL Server 为例)。


1. 安装 NuGet 包

dotnet add package Dapper
dotnet add package Microsoft.Data.SqlClient

2. 配置数据库连接(appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=TestDb;Trusted_Connection=True;"
  }
}

3. 创建实体类

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

4. 控制器中使用 Dapper

using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
using System.Data;

[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
    private readonly string _connectionString;

    public UsersController(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IEnumerable<User> GetAll()
    {
        using var connection = new SqlConnection(_connectionString);
        return connection.Query<User>("SELECT Id, Name FROM Users");
    }

    [HttpPost]
    public IActionResult Create([FromBody] User user)
    {
        using var connection = new SqlConnection(_connectionString);
        var sql = "INSERT INTO Users (Name) VALUES (@Name)";
        connection.Execute(sql, user);
        return Ok("添加成功");
    }
}

说明:

  • 通过依赖注入获取数据库连接字符串。
  • 使用 Dapper 的 Query<T> 查询数据,Execute 执行插入。
  • 适用于高性能、灵活 SQL 的场景。

如需更复杂的操作(如事务、存储过程等),Dapper 也有相应支持。