SmartDapper如何实现数据库操作的疑问?
摘要:SmartDapper SmartDapper 是一个基于 Dapper 的轻量级扩展库,提供 表达式树转 SQL、链式构建器(Fluent Builder:QuerySetInsertSetUpdateSetDeleteSet,支持
SmartDapper
SmartDapper 是一个基于 Dapper 的轻量级扩展库,提供 表达式树转 SQL、链式构建器(Fluent Builder:QuerySet/InsertSet/UpdateSet/DeleteSet,支持 Where/Select/Join/GroupBy/OrderBy/Union/Set/Fill 等)、通用 CRUD、分页查询 与 多数据库适配(SQL Server / MySQL / SQLite)。默认参数化执行,以降低 SQL 注入风险。
安装
dotnet add package SmartDapper
快速开始(SQL 生成 + Dapper 执行)
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Dapper;
using Microsoft.Data.SqlClient;
using SmartDapper.SqlGenerator;
[Table("Users")]
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string UserName { get; set; } = string.Empty;
public bool IsActive { get; set; }
}
var generator = SqlGeneratorFactory.CreateSqlServer<User>();
var (sql, parameters) = generator.GetSelectAll(u => u.IsActive);
using var conn = new SqlConnection("Server=.;Database=MyDb;Trusted_Connection=True;TrustServerCertificate=True;");
var users = conn.Query<User>(sql, parameters).ToList();
使用扩展方法(IDbConnection)
using Microsoft.Data.SqlClient;
using SmartDapper.Extensions;
using var conn = new SqlConnection("Server=.;Database=MyDb;Trusted_Connection=True;TrustServerCertificate=True;");
// ---------------------------
// 结果映射(可选,但推荐:列名/属性名不一致时)
// ---------------------------
// 让 Dapper 在 materialize(结果集->实体)时优先使用 [Column("DbColumn")] 映射,
// 并可选开启下划线匹配(user_name -> UserName)。
//
// 注意:这是 Dapper 的全局设置(进程内对该实体类型的所有查询都会受影响),建议只在启动阶段执行一次。
