首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >告别繁琐 CRUD:使用 Acme.EFCore.Small 让 .NET 数据库操作更优雅

告别繁琐 CRUD:使用 Acme.EFCore.Small 让 .NET 数据库操作更优雅

作者头像
云中小生
发布2026-03-31 17:55:11
发布2026-03-31 17:55:11
280
举报

作为 .NET 开发者,我们每天都在与数据库打交道。Entity Framework Core 虽然强大,但每次搭建项目时都要重复配置仓储、处理工作单元、编写基础增删改查代码,实在令人心累。

今天给大家推荐一款轻量级的 EFCore 通用库——Acme.EFCore.Small。它封装了 EF Core 的繁琐细节,提供开箱即用的仓储模式和事务管理,让你专注于业务逻辑的实现。

📦 最新版本:v1.3.6.4 📅 更新亮点:支持 .NET 10,修复了已知的并发问题。

NuGet Acme.EFCore.Small
NuGet Acme.EFCore.Small

NuGet Acme.EFCore.Small

🚀 功能亮点

  • 即插即用:通过 NuGet 一键安装,快速集成到现有项目
  • 多数据库支持:兼容 SQL Server、MySQL、PostgreSQL、Oracle 等主流数据库
  • 仓储模式封装:内置单库/多库两种仓储模式,告别重复的 DbContext 操作
  • 事务自动管理:简单易懂的事务控制 API,避免数据不一致
  • 高性能扩展:支持无跟踪查询、动态排序、分页等高级特性
  • 跨版本兼容:从 .NET Core 3.1 到 .NET 10,全版本覆盖

🛠️ 快速上手(5分钟搞定)

第一步:安装核心包

在 NuGet 包管理器中搜索 Acme.EFCore.Small 并安装。

NuGet 包管理器界面
NuGet 包管理器界面

NuGet 包管理器界面

第二步:安装数据库驱动

根据你的数据库类型,选择对应的驱动包:

数据库

NuGet 包

SQL Server

Microsoft.EntityFrameworkCore.SqlServer

MySQL

Pomelo.EntityFrameworkCore.MySql

PostgreSQL

Npgsql.EntityFrameworkCore.PostgreSQL

SQLite

Microsoft.EntityFrameworkCore.Sqlite

SQL Server安装包示意图
SQL Server安装包示意图

SQL Server安装包示意图

第三步:创建上下文与实体

代码语言:javascript
复制
public classAppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    
    public DbSet<User> Users { get; set; }
    public DbSet<Product> Products { get; set; }
}

// 继承 BaseEntity,自动获得 Id、CreateTime 等通用属性
publicclassUser : BaseEntity
{
    publicstring Name { get; set; }
    publicstring Email { get; set; }
}

第四步:配置连接字符串

appsettings.json 中添加数据库连接信息:

代码语言:javascript
复制
{
    "ConnectionStrings": {
        "DefaultConnection": "Server=.;Database=MyDb;User Id=sa;Password=xxx;"
    }
}

第五步:依赖注入

Program.csStartup.cs 中一行代码注册服务:

代码语言:javascript
复制
// 配置 DbContext
services.AddDbContext<AppDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

// 注入单库仓储(一个数据库)
services.AddRepositorys<AppDbContext>();

至此,你的项目已经具备完整的数据库操作能力,接下来就可以愉快地使用仓储进行数据操作了。

📦 核心功能演示

1. 基础增删改查

在业务层注入 IRepository<User>,无需编写任何仓储实现代码:

代码语言:javascript
复制
public classUserService
{
    privatereadonly IRepository<User> _userRepo;
    
    public UserService(IRepository<User> userRepo)
    {
        _userRepo = userRepo;
    }
    
    // 添加并立即保存
    public User AddUser(string name, string email)
    {
        var user = new User { Name = name, Email = email };
        return _userRepo.AddNowSave(user);
    }
    
    // 条件查询
    public User GetUserById(int id)
    {
        return _userRepo.GetInfo(u => u.Id == id);
    }
    
    // 异步操作
    publicasync Task<List<User>> GetAllUsersAsync()
    {
        returnawait _userRepo.GetListAsync();
    }
}

2. 多库场景支持

如果你的项目需要连接多个数据库,只需指定上下文即可:

代码语言:javascript
复制
// 注入多个仓储
private readonly IRepository<AppDbContext, User> _userRepo;
private readonly IRepository<LogDbContext, Log> _logRepo;

3. 事务管理

内置事务封装,让你轻松保证数据一致性:

代码语言:javascript
复制
public void CreateOrder(Order order)
{
    try
    {
        _orderRepo.BeginTransaction();
        
        _orderRepo.Add(order);
        foreach (var item in order.Items)
        {
            _itemRepo.Add(item);
        }
        
        _orderRepo.CommitTransaction();
    }
    catch
    {
        _orderRepo.RollbackTransaction();
        throw;
    }
    finally
    {
        _orderRepo.DisposeTransaction();
    }
}

4. 分页与排序

使用 ToPageList 扩展方法,分页代码简洁明了:

代码语言:javascript
复制
public PageList<User> GetUsers(int pageIndex, int pageSize, string keyword)
{
    var query = _userRepo.Queryable(u => u.Name.Contains(keyword));
    return query.ToPageList(pageIndex, pageSize);
}

// 动态排序
query = query.OrderBy("CreateTime", isAscending: false);

5. 性能优化:无跟踪查询

对于只读报表类场景,使用 GetListNoTracking 可以有效提升性能:

代码语言:javascript
复制
var list = _userRepo.GetListNoTracking(u => u.IsActive == true);

🧩 高级玩法

值对象与聚合根

库中内置了领域驱动设计(DDD)的基础抽象类:

  • BaseAggregateRoot:适合 Order、Customer 等聚合根实体
  • BaseValueObject:适合 Address、Money 等值对象

自定义扩展

你可以基于 IRepository 接口进行扩展,增加自定义的查询方法,仓储层依然保持整洁。

📌 支持的 .NET 版本

版本

支持情况

.NET Core 3.1

.NET 5 / 6 / 7 / 8 / 9 / 10

各 .NET 版本兼容性展示图
各 .NET 版本兼容性展示图

各 .NET 版本兼容性展示图

项目地址:https://www.nuget.org/packages/Acme.EFCore.Small/

🎯 结语

Acme.EFCore.Small 不追求大而全,而是专注于解决 80% 的日常数据库操作痛点。如果你正在搭建一个新的 .NET 项目,或者想重构现有项目中的数据库访问层,不妨试试这款轻量级利器。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 .NET修仙日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀 功能亮点
  • 🛠️ 快速上手(5分钟搞定)
    • 第一步:安装核心包
    • 第二步:安装数据库驱动
    • 第三步:创建上下文与实体
    • 第四步:配置连接字符串
    • 第五步:依赖注入
  • 📦 核心功能演示
    • 1. 基础增删改查
    • 2. 多库场景支持
    • 3. 事务管理
    • 4. 分页与排序
    • 5. 性能优化:无跟踪查询
  • 🧩 高级玩法
    • 值对象与聚合根
    • 自定义扩展
  • 📌 支持的 .NET 版本
  • 🎯 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档