展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Dapper如何批量更新数据 Dapper Bulk Update高效实现

Dapper如何批量更新数据 Dapper Bulk Update高效实现

Dapper本身不支持批量更新,需借助原生SQL、表值参数(TVP)、临时表或第三方库(如RepoDB、Dapper.FastCRUD)实现;推荐TVP+JOIN方式,避免foreach循环和字符串拼接。

本文目录

    Dapper 本身不支持批量更新,需借助原生 SQL、表值参数(TVP)、临时表或第三方库(如 RepoDB、Dapper.FastCRUD)实现;推荐 TVP + JOIN 方式,避免 foreach 循环和字符串拼接。

    Dapper如何批量更新数据 Dapper Bulk Update高效实现

    Dapper 本身不内置批量更新(Bulk Update)功能,它是一个轻量级 ORM,专注于单条 SQL 执行和映射。要实现高效批量更新,需结合原生 SQL、表值参数(TVP)、临时表或第三方扩展库(如 Dapper.FastCRUD、Dapper.Contrib 或更主流的 SqlKata + SqlServer 配合 TVP)。核心思路是:避免循环执行单条 UPDATE,改用一次 SQL 操作更新多行。

    使用表值参数(TVP)+ 原生 SQL(推荐,SQL Server)

    这是最常用、性能好且可控性强的方式。先在 SQL Server 中创建用户定义表类型(UDT),再通过 DataTable 或自定义 IDataReader 传入多行数据,在 UPDATE 中 JOIN TVP 完成批量更新。

    • 在数据库中提前建好 TVP 类型,例如:CREATE TYPE dbo.UpdateUserTableType AS TABLE (Id INT, Name NVARCHAR(50), Email NVARCHAR(100));
    • C# 中构造 DataTable,列名/类型严格匹配 TVP;或用 Dapper.SqlMapper.Execute 配合 new SqlMapper.ICustomQueryParameter 实现高效传参
    • SQL 写法示例:UPDATE u SET u.Name = t.Name, u.Email = t.Email FROM Users u INNER JOIN @updates t ON u.Id = t.Id;

    拼接动态 SQL(小批量、简单场景)

    适用于更新数据量较小(比如 ≤ 100 条)、字段固定、且对 SQL 注入有严格校验的场景。用 StringBuilder 拼出 CASE WHEN 或 VALUES + JOIN 形式。