作为 .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 包管理器界面
根据你的数据库类型,选择对应的驱动包:
数据库 | NuGet 包 |
|---|---|
SQL Server | Microsoft.EntityFrameworkCore.SqlServer |
MySQL | Pomelo.EntityFrameworkCore.MySql |
PostgreSQL | Npgsql.EntityFrameworkCore.PostgreSQL |
SQLite | Microsoft.EntityFrameworkCore.Sqlite |

SQL Server安装包示意图
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 中添加数据库连接信息:
{
"ConnectionStrings": {
"DefaultConnection": "Server=.;Database=MyDb;User Id=sa;Password=xxx;"
}
}
在 Program.cs 或 Startup.cs 中一行代码注册服务:
// 配置 DbContext
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// 注入单库仓储(一个数据库)
services.AddRepositorys<AppDbContext>();
至此,你的项目已经具备完整的数据库操作能力,接下来就可以愉快地使用仓储进行数据操作了。
在业务层注入 IRepository<User>,无需编写任何仓储实现代码:
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();
}
}
如果你的项目需要连接多个数据库,只需指定上下文即可:
// 注入多个仓储
private readonly IRepository<AppDbContext, User> _userRepo;
private readonly IRepository<LogDbContext, Log> _logRepo;
内置事务封装,让你轻松保证数据一致性:
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();
}
}
使用 ToPageList 扩展方法,分页代码简洁明了:
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);
对于只读报表类场景,使用 GetListNoTracking 可以有效提升性能:
var list = _userRepo.GetListNoTracking(u => u.IsActive == true);
库中内置了领域驱动设计(DDD)的基础抽象类:
你可以基于 IRepository 接口进行扩展,增加自定义的查询方法,仓储层依然保持整洁。
版本 | 支持情况 |
|---|---|
.NET Core 3.1 | ✅ |
.NET 5 / 6 / 7 / 8 / 9 / 10 | ✅ |

各 .NET 版本兼容性展示图
项目地址:https://www.nuget.org/packages/Acme.EFCore.Small/
Acme.EFCore.Small 不追求大而全,而是专注于解决 80% 的日常数据库操作痛点。如果你正在搭建一个新的 .NET 项目,或者想重构现有项目中的数据库访问层,不妨试试这款轻量级利器。