Appearance
常用 NuGet 包列表
概述
EF Core 生态系统拥有丰富的 NuGet 包,涵盖数据库提供程序、扩展工具、测试框架等。本文整理了最常用的 EF Core 相关包及其用途。
核心包
1. EF Core 主包
xml
<!-- EF Core 核心库 -->
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
<!-- 设计时支持(迁移必需) -->
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0" />
<!-- 关系数据库抽象 -->
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.0" />说明:
Microsoft.EntityFrameworkCore: 核心功能,所有项目都需要Microsoft.EntityFrameworkCore.Design: 开发时工具,仅开发环境需要Microsoft.EntityFrameworkCore.Relational: 关系数据库通用抽象
数据库提供程序
SQL Server
xml
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />特点:
- ✅ 微软官方支持
- ✅ 性能最优
- ✅ 功能最完整
- 💰 商业许可费用
PostgreSQL
xml
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />特点:
- ✅ 开源免费
- ✅ 强大的 JSON 支持
- ✅ 跨平台
- 🌍 社区活跃
MySQL / MariaDB
xml
<!-- Pomelo (推荐) -->
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
<!-- Oracle 官方 -->
<PackageReference Include="MySql.EntityFrameworkCore" Version="8.0.0" />对比:
- Pomelo: 社区维护,更新快,功能丰富 ⭐⭐⭐⭐⭐
- Oracle 官方: 官方支持,但更新较慢 ⭐⭐⭐
SQLite
xml
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0" />适用场景:
- ✅ 移动应用(Xamarin/MAUI)
- ✅ 桌面应用(WPF/WinForms)
- ✅ 单元测试和集成测试
- ✅ 小型嵌入式应用
Cosmos DB
xml
<PackageReference Include="Microsoft.EntityFrameworkCore.Cosmos" Version="8.0.0" />特点:
- ✅ 无服务器架构
- ✅ 自动扩展
- ✅ 全球分布
- 💰 按使用量付费
InMemory (测试用)
xml
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0" />用途:
- ⚠️ 仅用于单元测试
- ❌ 不模拟真实数据库行为
- ✅ 快速执行
扩展工具包
1. EFCore.BulkExtensions (批量操作) ⭐⭐⭐⭐⭐
xml
<PackageReference Include="EFCore.BulkExtensions" Version="8.0.0" />功能:
- 批量插入/更新/删除
- 性能提升 10-50 倍
- 支持 SQL Server, PostgreSQL, MySQL, SQLite
示例:
csharp
await context.BulkInsertAsync(products);
await context.BulkUpdateAsync(products);
await context.BulkDeleteAsync(products);性能对比:
普通 SaveChanges: 1000 条/秒
BulkExtensions: 50000 条/秒
提升: 50 倍2. EFCoreSecondLevelCacheInterceptor (二级缓存)
xml
<PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="4.0.0" />功能:
- 查询结果缓存
- 分布式缓存支持(Redis, MemoryCache)
- 自动失效
配置:
csharp
builder.Services.AddEFSecondLevelCache(options =>
{
options.UseMemoryCacheProvider(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(10));
});
builder.Services.AddDbContext<AppDbContext>(options =>
{
options.UseSqlServer(connectionString)
.AddInterceptors(new EFCacheInterceptor());
});3. Ardalis.Specification (规范模式)
xml
<PackageReference Include="Ardalis.Specification.EntityFrameworkCore" Version="7.0.0" />功能:
- 封装查询逻辑
- 可组合的查询
- Repository 模式集成
示例:
csharp
public class CustomerByNameSpec : Specification<Customer>
{
public CustomerByNameSpec(string name)
{
Query.Where(c => c.Name.Contains(name));
}
}
var customers = await repo.ListAsync(new CustomerByNameSpec("John"));4. ShardingCore (分库分表)
xml
<PackageReference Include="ShardingCore" Version="8.0.0" />功能:
- 动态分表
- 读写分离
- 自动路由
- 跨分片查询
适用场景:
- 大数据量表(> 1000 万行)
- 高并发写入
- 多租户隔离
5. EntityFramework.Exceptions (异常处理)
xml
<PackageReference Include="EntityFramework.Exceptions.SqlServer" Version="8.0.0" />功能:
- 友好的异常消息
- 常见错误自动检测
- 简化错误处理
示例:
csharp
try
{
await context.SaveChangesAsync();
}
catch (UniqueConstraintException ex)
{
// 唯一约束违反
}
catch (CannotInsertNullException ex)
{
// 非空约束违反
}测试相关包
1. Moq (Mocking)
xml
<PackageReference Include="Moq" Version="4.20.0" />用途: Mock DbContext 和仓储接口
2. NSubstitute (替代 Moq)
xml
<PackageReference Include="NSubstitute" Version="5.1.0" />优点: 更简洁的语法
3. Bogus (测试数据生成)
xml
<PackageReference Include="Bogus" Version="35.0.0" />功能: 生成逼真的测试数据
示例:
csharp
var faker = new Faker<Product>()
.RuleFor(p => p.Name, f => f.Commerce.ProductName())
.RuleFor(p => p.Price, f => f.Finance.Amount(10, 1000))
.RuleFor(p => p.Stock, f => f.Random.Int(0, 100));
var testProducts = faker.Generate(100);4. Testcontainers (容器化测试)
xml
<PackageReference Include="Testcontainers.MsSql" Version="3.7.0" />
<PackageReference Include="Testcontainers.PostgreSql" Version="3.7.0" />功能: 在 Docker 容器中运行真实数据库进行测试
监控与诊断包
1. MiniProfiler (性能分析)
xml
<PackageReference Include="MiniProfiler.EntityFrameworkCore" Version="4.3.0" />功能:
- SQL 查询性能分析
- 页面加载时间
- N+1 查询检测
2. OpenTelemetry (分布式追踪)
xml
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta.10" />功能:
- 分布式追踪
- 性能监控
- 与 Jaeger/Zipkin 集成
3. Sentry (错误追踪)
xml
<PackageReference Include="Sentry.EntityFramework" Version="4.0.0" />功能:
- 自动捕获异常
- 性能监控
- 错误聚合分析
代码生成包
1. EF Core Power Tools (可视化建模)
安装: Visual Studio 扩展市场
功能:
- ER 图生成
- 逆向工程 GUI
- 代码自定义模板
2. RevEng (命令行逆向工程)
xml
<PackageReference Include="EfCore.SchemaCompare" Version="8.0.0" />功能:
- 数据库架构比较
- 同步脚本生成
实用工具包
1. Humanizer (复数化/格式化)
xml
<PackageReference Include="Humanizer.Core" Version="2.14.1" />用途:
- 表名复数化(Product → Products)
- 日期格式化
2. AutoMapper (对象映射)
xml
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />功能: Entity ↔ DTO 自动映射
示例:
csharp
CreateMap<Product, ProductDto>();
var dto = mapper.Map<ProductDto>(product);3. MediatR (CQRS)
xml
<PackageReference Include="MediatR" Version="12.2.0" />功能:
- 命令/查询分离
- 领域事件处理
- 解耦业务逻辑
安全相关包
1. DataProtection (数据加密)
xml
<PackageReference Include="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Version="8.0.0" />功能: 密钥持久化到数据库
2. Identity (身份认证)
xml
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.0" />功能:
- 用户管理
- 角色管理
- 密码哈希
版本兼容性参考
| EF Core 版本 | .NET 版本 | 发布日期 | 支持状态 |
|---|---|---|---|
| 8.0.x | .NET 8 | 2023.11 | ✅ LTS (至 2026.11) |
| 7.0.x | .NET 7 | 2022.11 | ⚠️ STS (已结束) |
| 6.0.x | .NET 6 | 2021.11 | ✅ LTS (至 2024.11) |
| 5.0.x | .NET 5 | 2020.11 | ❌ 已结束 |
| 3.1.x | .NET Core 3.1 | 2019.12 | ❌ 已结束 |
建议: 新项目使用 EF Core 8.0 LTS
常用包组合
Web API 项目
xml
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
<PackageReference Include="EFCore.BulkExtensions" Version="8.0.0" />
<PackageReference Include="Ardalis.Specification.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
</ItemGroup>微服务项目
xml
<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.7.0" />
<PackageReference Include="EFCoreSecondLevelCacheInterceptor" Version="4.0.0" />
</ItemGroup>测试项目
xml
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0" />
<PackageReference Include="Moq" Version="4.20.0" />
<PackageReference Include="Bogus" Version="35.0.0" />
<PackageReference Include="Testcontainers.MsSql" Version="3.7.0" />
</ItemGroup>查找最新版本的技巧
1. NuGet.org 搜索
访问: https://www.nuget.org/packages?q=entityframeworkcore2. Visual Studio NuGet 管理器
右键项目 → 管理 NuGet 包 → 浏览3. .NET CLI
bash
# 查看可用版本
dotnet list package --outdated
# 更新包
dotnet add package Microsoft.EntityFrameworkCore --version 8.0.0总结
必备包 TOP 10
- Microsoft.EntityFrameworkCore - 核心库
- 数据库提供程序 - SqlServer/Npgsql/Pomelo
- Microsoft.EntityFrameworkCore.Design - 迁移工具
- EFCore.BulkExtensions - 批量操作
- Ardalis.Specification - 查询封装
- AutoMapper - 对象映射
- MediatR - CQRS
- Moq - 单元测试
- Bogus - 测试数据
- MiniProfiler - 性能分析
根据项目需求选择合适的包,不要过度依赖! 🚀