惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
博客园 - 【当耐特】
量子位
Engineering at Meta
Engineering at Meta
博客园_首页
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
V
Visual Studio Blog
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
Jina AI
Jina AI
The Cloudflare Blog
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 聂微东

博客园 - lightsong

LoRA unsloth比transformer库本身的微调有什么优点? offline-llms +++ transformer + peft 微调 Train and Fine-Tune Sentence Transformers Models Symmetric vs. Asymmetric Semantic Search Hierarchical Navigable Small Worlds (HNSW) Vision Transformer + BentoML ML Serving/编排工具 Introducing Gemma 3 270M: The compact model for hyper-efficient AI Utopia -- 企业世界模型 trustgraph semantica semantica vs graphti Industrial-Strength Natural Language Processing seata reference with springboot and other valuable demo outbox pattern with springboot Saga pattern with springboot 基于 Sentence Transformers 的具体应用案例 Vault with Keycloak as workload IAM Ontology Reasoning System ADR Claude Code的hook The AI-Native SDLC playbook Introduction to FluentValidation Introduction to AutoFixture Introduction to FluentAssertions Understanding Return Types: IEnumerable, IReadOnlyCollection, and List Introduction to Refit Introduction to Carter Introduction to Minimal APIs
Introduction to Dapper
lightsong · 2026-08-28 · via 博客园 - lightsong

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 许可协议发布)

出处:http://www.cnblogs.com/lightsong/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。