Stay Hungry,Stay Foolish!

Introduction to Dapper

Introduction to Dapper

https://jdaniel1987.github.io/Dapper

 

我已经把它翻译成了中文博客的格式,保留了所有的代码示例和结构,你可以直接拿去发布:


博客文章草稿

标题: Dapper 简介
作者: Jaime Daniel Delgado Ortega
发布时间: 2024年9月8日
阅读时间: 2 分钟


Dapper 简介

Dapper 是一个用于 .NET 的微 ORM(对象关系映射器),它为 Entity Framework 等传统 ORM 提供了一种轻量级且快速的替代方案。Dapper 并不将类完全映射到数据库表,而是擅长简化 SQL 查询执行并将结果直接映射到 C# 对象。

Dapper 的优势

  • 性能: Dapper 速度极快,几乎可以媲美直接使用 ADO.NET 的速度。
  • 简单性: 只需极少的配置,您就可以将 Dapper 快速集成到任何 .NET 项目中。
  • 灵活性: Dapper 允许您编写原始 SQL 查询,让您完全掌控数据库交互。

使用示例

1. 安装 NuGet 包

通过安装 NuGet 包将 Dapper 添加到您的项目中。有多种方法可以做到这一点,请选择最适合您的一种。例如,在 Visual Studio 中:右键单击您的项目 -> 管理 NuGet 包... -> 浏览,搜索“Dapper”,选中它并点击安装。

[图片占位:NuGet 包管理器安装 Dapper 的截图]
(建议在此处插入一张显示在 Visual Studio 中搜索并安装 Dapper 包的截图)

2. 配置数据库访问

您只需要数据库的连接字符串。虽然如果连接字符串设置在 appsettings.json 中,您可以使用 IConfiguration 来检索它,但为了本示例,我们将把它定义为仓库中的一个全局变量:

private static string _connectionString = "{YourDbConnectionString}";

3. 使用 Dapper 查询数据库

获取一条记录

public async Task<Mark> GetMark(int id)
{
    string sql = @"SELECT [Id]
                          ,[Name]
                          ,[Surname]
                          ,[Score]
                   FROM [Marks]
                   WHERE Id = @id";
    
    var db = new SqlConnection(_connectionString);
    var mark = await db.QueryFirstAsync<Mark>(sql, new { id });

    return mark;
}

获取多条记录

public async Task<IReadOnlyCollection<Mark>> GetMarks()
{
    var sql = @"SELECT [Id]
                       ,[Name]
                       ,[Surname]
                       ,[Score]
                FROM [Marks]
                ORDER BY Surname";
    
    using var db = new SqlConnection(_connectionString);
    var marks = await db.QueryAsync<Mark>(sql);

    return marks.ToImmutableArray();
}

添加一条记录

public async Task<int> CreateMark(Mark mark)
{
    var sql = @"INSERT INTO [Marks] ([Name], [Surname], [Score])
                OUTPUT INSERTED.Id
                VALUES (@name, @surname, @mark);";

    var db = new SqlConnection(_connectionString);
    var id = await db.QuerySingleAsync<int>(sql, new
    {
        name = mark.Name,
        surname = mark.Surname,
        mark = mark.Score,
    });

    return id;
}

更新一条记录

public async Task UpdateMark(Mark mark, int id)
{
    string sql = @"UPDATE [Marks]
                   SET
                       [Name] = @name,
                       [Surname] = @surname,
                       [Score] = @mark
                   WHERE
                       [Id] = @id";
    
    var db = new SqlConnection(_connectionString);
    await db.QueryAsync(sql, new
    {
        id,
        name = mark.Name,
        surname = mark.Surname,
        mark = mark.Score,
    });
}

删除一条记录

public async Task DeleteMark(int id)
{
    string sql = @"DELETE FROM [Marks]
                   WHERE [Id] = @id";
    
    var db = new SqlConnection(_connectionString);
    await db.QueryAsync(sql, new { id });
}

示例项目链接

GitHub - DapperExample

标签: #C# #.NET #ORM #Dapper #DataAccess #Databases #Performance

(本文根据 CC BY 4.0 许可协议发布)

 

posted @ 2026-08-28 12:21  lightsong  阅读(4)  评论(0)    收藏  举报
千山鸟飞绝,万径人踪灭