Skip to content

EF Core 版本历史与支持周期 ​

了解 EF Core 的演进历程、版本特性和支持策略

📅 版本时间线 ​

mermaid
graph LR
    A[EF Core 1.0<br/>2016.06] --> B[EF Core 2.0<br/>2017.08]
    B --> C[EF Core 2.1 LTS<br/>2018.05]
    C --> D[EF Core 3.0<br/>2019.09]
    D --> E[EF Core 3.1 LTS<br/>2019.12]
    E --> F[EF Core 5.0<br/>2020.11]
    F --> G[EF Core 6.0 LTS<br/>2021.11]
    G --> H[EF Core 7.0<br/>2022.11]
    H --> I[EF Core 8.0 LTS<br/>2023.11]
    I --> J[EF Core 9.0<br/>2024.11]
    J --> K[EF Core 10.0<br/>2025.11 预览]

🔍 版本详解 ​

EF Core 1.x(已停止支持) ​

发布时间:2016 年 6 月
基于框架:.NET Core 1.x

主要特性 ​

  • ✅ 跨平台支持
  • ✅ 代码优先(Code First)
  • ✅ LINQ 查询
  • ✅ 迁移系统

局限性 ​

  • ❌ 功能不完整(相比 EF 6)
  • ❌ 不支持延迟加载
  • ❌ 不支持存储过程
  • ❌ 性能一般

建议:不要使用,已过时。


EF Core 2.0/2.1(已停止支持) ​

发布时间:2017-2018 年
LTS 版本:2.1(支持至 2021 年 8 月)

新特性 ​

  • ✅ 改进的 LINQ 翻译
  • ✅ 全局查询过滤器
  • ✅ DbContext 池化
  • ✅ 显式编译查询

典型应用 ​

csharp
// EF Core 2.1 引入全局过滤器
modelBuilder.Entity<Product>(entity =>
{
    entity.HasQueryFilter(p => !p.IsDeleted); // 软删除
});

建议:如仍在使用,尽快升级。


EF Core 3.0/3.1(扩展支持中) ​

发布时间:2019 年
LTS 版本:3.1(支持至 2022 年 12 月,部分扩展支持)

重大变更 ​

  • ⚠️ 客户端评估移除:所有查询必须在服务器端执行
  • ✅ 改进的性能
  • ✅ 更好的 SQL 生成

破坏性变更示例 ​

csharp
// ❌ EF Core 3.0+ 不再支持
var customers = context.Customers
    .Where(c => c.Name.StartsWith(ExpensiveClientMethod())) // 运行时异常
    .ToList();

// ✅ 必须改为
var customers = context.Customers
    .Where(c => c.Name.StartsWith("A"))
    .ToList();

建议:仍在维护的项目应升级到 8.0+。


EF Core 5.0(已停止支持) ​

发布时间:2020 年 11 月
基于框架:.NET 5

新特性 ​

  • ✅ 多对多关系(无需显式连接表)
  • ✅ 简单日志记录
  • ✅ 过滤 Include
  • ✅ 单个查询拆分

多对多关系简化 ​

csharp
// EF Core 5.0 之前
modelBuilder.Entity<Post>()
    .HasMany(p => p.Tags)
    .WithMany(t => t.Posts)
    .UsingEntity<Dictionary<string, object>>(
        "PostTag",
        j => j.HasOne<Tag>().WithMany().HasForeignKey("TagId"),
        j => j.HasOne<Post>().WithMany().HasForeignKey("PostId"));

// EF Core 5.0+
modelBuilder.Entity<Post>()
    .HasMany(p => p.Tags)
    .WithMany(t => t.Posts);

建议:短期项目可使用,长期项目选择 LTS 版本。


EF Core 6.0 LTS(主流支持已结束) ​

发布时间:2021 年 11 月
支持周期:2024 年 11 月(3 年 LTS)
基于框架:.NET 6

核心特性 ​

  • ✅ 性能提升:比 EF Core 5 快 50%+
  • ✅ 预生成模型:减少启动时间
  • ✅ 临时表优化:改进批量操作
  • ✅ Azure Cosmos DB 提供程序

性能对比 ​

EF Core 5.0:  ████████████░░░░░░ 100%
EF Core 6.0:  ██████████████████ 150% (+50%)

预生成模型 ​

csharp
// 减少大型模型的启动时间
dotnet ef dbcontext optimize

现状:大量生产环境仍在使用,建议计划迁移到 8.0 LTS。


EF Core 7.0(已停止支持) ​

发布时间:2022 年 11 月
基于框架:.NET 7

新特性 ​

  • ✅ TPT 继承映射(Table-per-Type)
  • ✅ 存储过程映射
  • ✅ JSON 列初步支持
  • ✅ 改进的 SQLite 支持

TPT 继承示例 ​

csharp
[Table("Animals")]
public class Animal
{
    public int Id { get; set; }
    public string Name { get; set; }
}

[Table("Cats")]
public class Cat : Animal
{
    public string Breed { get; set; }
}

建议:非 LTS 版本,不推荐新项目使用。


EF Core 8.0 LTS(✅ 当前推荐) ​

发布时间:2023 年 11 月
支持周期:2026 年 11 月(3 年 LTS)
基于框架:.NET 8

🌟 重大新特性 ​

1. 批量操作 API ​
csharp
// 批量删除
await context.Products
    .Where(p => p.IsObsolete)
    .ExecuteDeleteAsync();

// 批量更新
await context.Products
    .Where(p => p.Category == "Old")
    .ExecuteUpdateAsync(setters => setters
        .SetProperty(p => p.Category, "New")
        .SetProperty(p => p.UpdatedAt, DateTime.UtcNow));

性能提升:

  • 传统方式:N+1 次数据库往返
  • 批量操作:单次数据库往返
  • 性能提升 10-100 倍
2. JSON 列支持 ​
csharp
// 实体配置
modelBuilder.Entity<Product>(entity =>
{
    entity.OwnsOne(p => p.Details, owned =>
    {
        owned.ToJson(); // 存储为 JSON 列
    });
});

// 查询
var products = await context.Products
    .Where(p => p.Details.Weight > 10)
    .ToListAsync();

生成的 SQL:

sql
SELECT * FROM Products 
WHERE JSON_VALUE(Details, '$.Weight') > 10
3. 复合拆分查询 ​
csharp
// 自动拆分为多个查询,避免 JOIN 爆炸
var order = await context.Orders
    .AsSplitQuery()
    .Include(o => o.Customer)
    .Include(o => o.Items)
        .ThenInclude(i => i.Product)
    .FirstOrDefaultAsync(o => o.Id == orderId);

生成的 SQL:

sql
-- 查询 1: Orders
SELECT * FROM Orders WHERE Id = @id

-- 查询 2: Customers
SELECT * FROM Customers WHERE Id IN (...)

-- 查询 3: OrderItems + Products
SELECT * FROM OrderItems 
JOIN Products ON ... 
WHERE OrderId IN (...)
4. 预编译查询 ​
csharp
// 定义时编译
private static readonly Func<AppDbContext, int, Task<Product?>> GetProductById = 
    EF.CompileAsyncQuery(
        (AppDbContext context, int id) => 
            context.Products.FirstOrDefault(p => p.Id == id));

// 使用时直接调用(跳过翻译)
var product = await GetProductById(context, productId);

性能提升:10-30%(高频查询场景)

5. 改进的索引配置 ​
csharp
modelBuilder.Entity<Product>(entity =>
{
    // 包含列的索引
    entity.HasIndex(p => p.CategoryId)
          .IncludeProperties(p => p.Name, p.Price);
    
    // 降序索引
    entity.HasIndex(p => p.CreatedAt)
          .IsDescending();
});

性能基准测试 ​

操作EF Core 6EF Core 8提升
简单查询100ms75ms25%
复杂 Join250ms180ms28%
批量插入 1000 条500ms50ms90%
跟踪查询120ms90ms25%

适用场景 ​

  • ✅ 新项目首选
  • ✅ 长期维护项目
  • ✅ 企业级应用

强烈推荐:所有新项目使用 EF Core 8.0 LTS。


EF Core 9.0(✅ 最新稳定版) ​

发布时间:2024 年 11 月
支持周期:2026 年 5 月(18 个月 STS)
基于框架:.NET 9

🆕 新特性 ​

1. JSON 列增强 ​
csharp
// 嵌套 JSON 查询
var products = await context.Products
    .Where(p => p.Details.Manufacturer.Name == "Apple")
    .ToListAsync();

// JSON 数组查询
var products = await context.Products
    .Where(p => p.Tags.Any(t => t == "electronics"))
    .ToListAsync();
2. 改进的迁移体验 ​
bash
# 更智能的迁移合并
dotnet ef migrations add NewFeature --merge

# 迁移依赖分析
dotnet ef migrations analyze
3. 性能优化 ​
  • 查询翻译速度提升 15%
  • 内存分配减少 20%
  • 并发场景优化
4. 新的数据库函数 ​
csharp
// 内置更多 SQL 函数映射
var result = await context.Products
    .Select(p => new
    {
        p.Name,
        Length = EF.Functions.CharLength(p.Name),
        Upper = EF.Functions.Upper(p.Name)
    })
    .ToListAsync();

与 .NET 8 对比 ​

特性.NET 8 LTS.NET 9 STS
支持周期3 年18 个月
稳定性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
新特性成熟最新
推荐度生产环境技术尝鲜

建议:追求稳定的项目选 8.0,想体验新特性的选 9.0。


EF Core 10.0(🚧 预览版) ​

预计发布:2025 年 11 月
基于框架:.NET 10

🔮 预期特性(预览中) ​

1. AI 辅助查询优化 ​
csharp
// 自动建议索引
// AI 分析查询模式并推荐优化方案
var suggestions = await context.AnalyzeQueryPerformanceAsync(query);
2. 云原生集成增强 ​
  • Azure SQL 深度集成
  • 自动分区管理
  • 弹性伸缩支持
3. 更智能的查询翻译 ​
  • 改进的子查询优化
  • 自动查询重写
  • 更好的并行执行
4. 分布式事务改进 ​
  • Saga 模式支持
  • 最终一致性工具
  • 事件溯源集成

注意:预览版功能可能变化,不建议生产环境使用。


📊 版本对比总览 ​

功能矩阵 ​

功能6.07.08.09.010.0
批量操作 API❌❌✅✅✅
JSON 列❌基础✅增强完整
预编译查询❌❌✅✅✅
复合拆分查询❌❌✅✅✅
TPT 继承❌✅✅✅✅
存储过程映射❌✅✅✅✅
AI 优化❌❌❌❌🚧

性能对比(相对值) ​

EF Core 6.0:  ████████████████░░░░ 100%
EF Core 7.0:  █████████████████░░░ 115%
EF Core 8.0:  ███████████████████░ 135%
EF Core 9.0:  ████████████████████ 145%

🎯 版本选择建议 ​

决策树 ​

开始
 │
 ├─ 新项目?
 │   ├─ 是 → 选择 EF Core 8.0 LTS ✅
 │   └─ 否 ↓
 │
 ├─ 现有项目?
 │   ├─ 6.0 或更早 → 计划迁移到 8.0 LTS
 │   ├─ 7.0 → 升级到 8.0 LTS
 │   ├─ 8.0 → 继续使用,考虑 9.0
 │   └─ 9.0 → 评估 8.0 LTS 的稳定性需求
 │
 └─ 技术实验?
     └─ 尝试 9.0 或 10.0 预览版

具体建议 ​

🏢 企业级应用 ​

  • 推荐:EF Core 8.0 LTS
  • 理由:长期支持、稳定可靠、社区成熟

🚀 创业项目 ​

  • 推荐:EF Core 8.0 LTS 或 9.0
  • 理由:快速迭代、新功能丰富

🎓 学习用途 ​

  • 推荐:EF Core 9.0
  • 理由:最新特性、面向未来

⚙️ 遗留系统维护 ​

  • 最低:EF Core 3.1
  • 建议:制定迁移计划到 8.0+

🔄 升级指南 ​

从 EF Core 6 升级到 8 ​

1. 更新 NuGet 包 ​

xml
<!-- 旧版本 -->
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" />

<!-- 新版本 -->
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />

2. 检查破坏性变更 ​

3. 利用新特性 ​

csharp
// 替换旧的批量操作
// 旧方式
foreach (var product in obsoleteProducts)
{
    context.Products.Remove(product);
}
await context.SaveChangesAsync();

// 新方式(EF Core 8+)
await context.Products
    .Where(p => p.IsObsolete)
    .ExecuteDeleteAsync();

4. 性能测试 ​

  • 基准测试关键路径
  • 验证性能提升

📅 支持周期说明 ​

Microsoft 支持政策 ​

LTS(长期支持)版本 ​

  • 支持周期:3 年
  • 更新类型:安全补丁 + Bug 修复
  • 适用场景:生产环境、企业应用

STS(短期支持)版本 ​

  • 支持周期:18 个月
  • 更新类型:安全补丁 + Bug 修复 + 小特性
  • 适用场景:技术尝鲜、快速迭代

支持时间线 ​

版本发布日期主流支持结束扩展支持结束状态
6.0 LTS2021-112024-052024-11扩展支持
7.02022-112024-052024-05停止支持
8.0 LTS2023-112026-052026-11主流支持 ✅
9.02024-112026-052026-05主流支持 ✅
10.02025-11--预览版 🚧

💡 最佳实践 ​

1. 版本选择原则 ​

  • ✅ 优先选择 LTS 版本
  • ✅ 保持与 .NET 版本一致
  • ✅ 关注官方公告

2. 升级策略 ​

  • 📋 制定年度升级计划
  • 🧪 充分测试后再升级生产环境
  • 📊 监控性能指标变化

3. 依赖管理 ​

xml
<!-- 使用固定版本号,避免自动升级 -->
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" />

<!-- 不要使用 -->
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.*" />

4. 监控生命周期 ​


📚 延伸阅读 ​


💬 常见问题 ​

Q: 我应该使用哪个版本? ​

A:

  • 生产环境:EF Core 8.0 LTS
  • 学习实验:EF Core 9.0
  • 遗留维护:至少 3.1+,计划升级

Q: LTS 和 STS 有什么区别? ​

A:

  • LTS:3 年支持,适合生产环境
  • STS:18 个月支持,适合技术尝鲜

Q: 如何知道何时需要升级? ​

A:

  • 当前版本支持即将结束
  • 需要新版本的功能
  • 遇到已修复的 Bug
  • 性能要求提升

Q: 升级风险大吗? ​

A:

  • 小版本升级(8.0 → 8.1):风险低
  • 大版本升级(7.0 → 8.0):需测试
  • 跨多版本升级(6.0 → 8.0):谨慎评估

总结:选择合适的版本是项目成功的基础。对于大多数场景,EF Core 8.0 LTS 是当前最佳选择。

基于 MIT 许可发布