当前位置: 首页 > news >正文

SmartDapper.Repository

SmartDapper.Repository 是基于 SmartDapper 的 Repository + UnitOfWork 封装,提供一致的 CRUD / 分页 API,并统一事务边界(支持自动提交/回滚与嵌套事务复用),用于组织数据访问层代码。

功能特性

  • 泛型仓储IRepository<T> + Repository<T>(内置常用 CRUD/分页)
  • 工作单元IUnitOfWork + UnitOfWork(统一连接与事务)
  • 事务作用域ITransactionScope + TransactionScope(未 Complete() 自动回滚;支持复用外层事务)
  • 事务快捷封装ExecuteInTransaction* 扩展方法,一行包裹事务边界

安装

dotnet add package SmartDapper.Repository

快速开始(ASP.NET Core)

方式 A:只使用 Repository + UnitOfWork(不依赖中间件)

Program.cs 统一注册 IDbConnection / IUnitOfWork / IRepository<>(推荐):

using System.Data;
using Microsoft.Data.SqlClient;
using SmartDapper.Repository.Extensions;var builder = WebApplication.CreateBuilder(args);var connectionString = builder.Configuration.GetConnectionString("Default")!;builder.Services.AddSmartDapperRepository(connectionString,cs => new SqlConnection(cs));

提示:如果不是 SQL Server,请自行替换连接类型,或实现你自己的 connectionFactory

方式 A2(推荐):配合 AddSmartDapperConnections(多连接工厂)

如果你已经使用 SmartDapper 的多连接工厂(AddSmartDapperConnections),可以直接让 Repository 复用工厂配置:

using Microsoft.Data.SqlClient;
using SmartDapper.Extensions;
using SmartDapper.Repository.Extensions;var builder = WebApplication.CreateBuilder(args);builder.Services.AddSmartDapperConnections(o =>
{o.Add("Main", builder.Configuration.GetConnectionString("Main")!, cs => new SqlConnection(cs));o.DefaultKey = "Main";
});// 默认连接(CreateDefault)
builder.Services.AddSmartDapperRepository();// 或指定 key(Create("Main"))
// builder.Services.AddSmartDapperRepository("Main");

方式 B:使用 SmartDapper.Middleware(包含 DI 注册 + 声明式事务)

如果你的项目是 Web API,并希望通过 [UnitOfWork] 自动开启事务,推荐直接用中间件包:

  • 参考:`[SmartDapper.Middleware]
using Microsoft.Data.SqlClient;
using SmartDapper.Middleware.Extensions;
using SmartDapper.Repository.Extensions;var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("Default")!;// 注册仓储 + 工作单元
builder.Services.AddSmartDapperRepository(connectionString, cs => new SqlConnection(cs));var app = builder.Build();// 注册工作单元中间件(可选:配合 [UnitOfWork])
app.UseSmartDapperUnitOfWork();app.MapControllers();
app.Run();

基础用法

public class CustomerService
{private readonly IRepository<Customer> _repo;public CustomerService(IRepository<Customer> repo){_repo = repo;}public async Task<long> CreateAsync(Customer customer){// 插入并返回自增 ID(如果你的实体/表是自增主键)return await _repo.InsertAndGetIdAsync(customer);}public Task<List<Customer>> ListAsync()=> _repo.GetAllListAsync();
}

事务用法(推荐)

推荐 1:扩展方法 ExecuteInTransaction*(最简洁)

using SmartDapper.Repository.Extensions;await _unitOfWork.ExecuteInTransactionAsync(async () =>
{await _customerRepository.InsertAsync(customer);await _orderRepository.InsertAsync(order);
});

推荐 2:CreateTransactionScope(可控且支持嵌套复用)

await using var scope = _unitOfWork.CreateTransactionScope();
try
{await _customerRepository.InsertAsync(customer);await _orderRepository.InsertAsync(order);await scope.CompleteAsync(); // 提交
}
catch
{// 未 Complete 时:DisposeAsync 自动回滚throw;
}

嵌套说明:如果外层已存在事务,TransactionScope 会自动复用外层事务,不会重复开启新事务。

不推荐:直接 BeginTransaction(需要你手动 Commit/Rollback)

如果你确实需要“完全手动控制提交/回滚”,可以使用 BeginTransaction/Commit/Rollback(请务必显式提交/回滚,避免长事务)。

生命周期与资源释放(重要)

  • 典型 Web 场景IUnitOfWork / IDbConnection 建议按 Scoped 注册(每个请求一个实例)。
  • 请求结束释放:DI 容器会调用 Dispose/DisposeAsync;若发现“未结束事务”,UnitOfWork 会进行防御性回滚并释放连接资源。
  • 后台任务/非 HTTP 场景:请手动创建 DI Scope,并在 scope 生命周期内使用同一个 IUnitOfWork
http://www.jsqmd.com/news/420042/

相关文章:

  • 数智化风控新标杆:2026年度合同管理系统公司核心竞争力调研报告 - 星野科技
  • 2026年通信工程师中级《综合能力》希赛培训笔记
  • 2025年口碑之选:国内热门重型货架品牌与产品推荐,库房货架/仓储重型货架/库房重力式货架,重型货架厂家哪个好 - 品牌推荐师
  • 2026年靠谱的静电纺丝设备/静电纺丝设备生产线可靠供应商参考哪家靠谱(可靠) - 行业平台推荐
  • 探讨衡水博利口碑如何,技术水平和在广西的合作案例多吗 - 工业推荐榜
  • Navicat Premium 17.1 绿色版使用教程
  • 2026年效果型短视频代运营企业实力推荐公司 - 行业平台推荐
  • 2026年NPDP新产品开发专业人士认证从哪里开始备考?
  • 2026年靠谱的乙炔气瓶检测设备/石油气瓶检测设备哪家质量好生产商实力参考 - 行业平台推荐
  • 如何高效回收永辉超市购物卡,简单又安全! - 团团收购物卡回收
  • 2026年评价高的流水线激光喷码机/激光喷码机销售厂家推荐哪家好(真实参考) - 行业平台推荐
  • 合同管理系统公司选型白皮书:2026数智化风控品牌渗透率分析 - 星野科技
  • 穿透财法边界:2026年度全球合同管理系统公司价值透视白皮书 - 星野科技
  • 永辉超市卡回收方法揭秘 - 团团收购物卡回收
  • 2026年口碑好的胶木球畅销生产厂家采购指南怎么选 - 行业平台推荐
  • 重庆OC商务ktv联系电话大全|官方正规渠道,高端宴请不踩坑 - damaigeo
  • 2026年2月家中常备的孕妇便秘产品推荐,守护孕期肠道健康 - 品牌鉴赏师
  • 鼎诚人寿北京分公司:故居仰贤,清风育企——宋庆龄故居清廉文化学习纪实 - 资讯焦点
  • 2026年口碑好的电加热沥青罐沥青设备/独立加温沥青设备推荐几家可靠供应商参考 - 行业平台推荐
  • 2026中国合同管理系统公司排名:内资领跑与全球巨头深度测评 - 星野科技
  • 2026年B2B社媒营销服务公司评选报告 - 资讯焦点
  • 2026年2月重型数控车床厂家推荐,工业级加工品质认证 - 品牌鉴赏师
  • AI降AI实测:从65%到14%,这些工具让我告别熬夜改论文 - 老米_专讲AIGC率
  • NMN哪个品牌效果好?2026优质NMN抗衰产品成分测评,NMN哪个产品最好?综合临床数据+用户口碑 - 资讯焦点
  • AtCoder Weekday Contest 0005 Beta题解(AWC 0005 Beta A-E)
  • 2026年口碑好的鸡蛋/鲜鸡蛋优质推荐汇总 - 品牌宣传支持者
  • 鼎诚人寿北京分公司:清廉文化浸润心灵,精神力量激励前行 - 资讯焦点
  • 2026全球十大NMN抗衰保健热门品牌揭晓!NMN热销榜NMN推荐,高活(GoHealth)霸榜第一名 - 资讯焦点
  • 深耕制造业出海赛道---云百邦如何打造B2B社媒营销增长体系 - 资讯焦点
  • 2026年口碑好的钢板预处理线哪家靠谱实力工厂参考 - 品牌宣传支持者