EF Core 超详细讲解(.NET 9 最新版,小白也能看懂)

4 阅读3分钟

我给你讲最实用、企业级、能直接开发的 EF Core 完整知识,不搞虚的。

一、EF Core 到底是什么?

全称:Entity Framework Core 一句话:.NET 官方的数据库操作框架(ORM)

作用:

  • 不用写复杂的 SQL 语句
  • C# 代码 直接操作数据库
  • 自动生成表、自动处理增删改查
  • 支持所有主流数据库(SQLite、SQL Server、MySQL、PostgreSQL)

简单说:写 C# = 操作数据库


二、EF Core 核心优势(为什么必须学)

  1. 跨平台:Windows / Linux / macOS 都能用
  2. 轻量高性能:比旧版 EF 快很多
  3. 自动建表/更新表:不用手动管理数据库结构
  4. 强类型:编译时检查错误,不会写错字段名
  5. 支持 LINQ 查询:用 C# 语法查数据,超级简单
  6. .NET 原生集成:和 ASP.NET Core 完美配合

三、核心概念(必须掌握)

1. 实体类(Entity)

对应数据库里的一张表

public class Product
{
    public int Id { get; set; }         // 主键(约定大于配置)
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
}

2. DbContext(数据库上下文)

EF Core 最核心对象

  • 管理数据库连接
  • 跟踪数据变化
  • 提供所有操作方法
public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) 
        : base(options) { }

    public DbSet<Product> Products { get; set; } // 对应表
}

3. DbSet

对应数据库里的一张表

  • DbSet<Product> = 数据库里的 Products 表
  • 所有增删改查都通过它操作

4. 迁移(Migration)

自动把 C# 类变成数据库表 不用手动建表、改表,EF Core 自动完成

命令:

dotnet ef migrations add 名字
dotnet ef database update

四、支持的数据库(全覆盖)

EF Core 几乎支持所有数据库:

  • SQLite(无需安装,学习首选)
  • SQL Server(企业最常用)
  • MySQL
  • PostgreSQL
  • Oracle
  • 内存数据库(测试用)

五、完整工作流程(开发标准流程)

1. 安装包

dotnet add package Microsoft.EntityFrameworkCore --version 9.0.3
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 9.0.3
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 9.0.3

2. 编写实体类

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
}

3. 编写 DbContext

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    public DbSet<Product> Products => Set<Product>();
}

4. 注册到程序

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlite("Data Source=App.db"));

5. 生成数据库

dotnet ef migrations add InitialCreate
dotnet ef database update

6. 开始操作数据(增删改查)

// 查询
var list = await _context.Products.ToListAsync();

// 新增
_context.Products.Add(new Product { Name = "商品1" });
await _context.SaveChangesAsync();

六、最常用 5 种操作(CRUD)

1. 查询(最常用)

// 查所有
var all = await _context.Products.ToListAsync();

// 根据ID查
var p = await _context.Products.FindAsync(id);

// 条件查询
var cheap = await _context.Products
    .Where(p => p.Price < 100)
    .ToListAsync();

2. 新增

var product = new Product { Name = "鼠标", Price = 89 };
_context.Products.Add(product);
await _context.SaveChangesAsync();

3. 修改

var p = await _context.Products.FindAsync(id);
p.Price = 99;
await _context.SaveChangesAsync();

4. 删除

var p = await _context.Products.FindAsync(id);
_context.Products.Remove(p);
await _context.SaveChangesAsync();

5. 异步(企业必须用)

所有方法都加 Async

  • ToListAsync()
  • FindAsync()
  • SaveChangesAsync()

七、EF Core 高级功能(企业必备)

1. 数据注解(配置表结构)

public class Product
{
    [Key]           // 主键
    public int Id { get; set; }

    [Required]      // 不能为空
    [MaxLength(50)] // 长度限制
    public string Name { get; set; } = string.Empty;
}

2. 关联表(一对多、多对多)

比如:一个分类下有多个商品

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public List<Product> Products { get; set; } = new();
}

3. 贪婪加载(Include)

查询时自动加载关联数据

var list = await _context.Categories
    .Include(c => c.Products)
    .ToListAsync();

4. 分页查询

var page = await _context.Products
    .Skip(10)    // 跳过10条
    .Take(10)    // 取10条
    .ToListAsync();

5. 原生 SQL 查询

var list = await _context.Products
    .FromSql($"SELECT * FROM Products WHERE Price < 100")
    .ToListAsync();

八、EF Core 生命周期(三种注入方式)

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlite("..."), ServiceLifetime.Scoped);
  • Scoped(默认):一次请求一个实例(最常用)
  • Transient:每次使用都新建
  • Singleton:全局唯一(极少用)

九、EF Core 高频错误解决

  1. 找不到 DbContext 解决:没注册 AddDbContext

  2. 数据库不存在 解决:执行 migration + update

  3. 数据不生效 解决:忘记写 await SaveChangesAsync()

  4. 循环引用 解决:加 [JsonIgnore]


十、总结(最重要的 10 点)

  1. EF Core = .NET 官方数据库 ORM
  2. 核心:DbContext + DbSet
  3. 不用写 SQL,用 LINQ
  4. Migration 自动建表
  5. 所有操作必须 async/await
  6. 支持所有主流数据库
  7. 配合 ASP.NET Core 开发接口
  8. 可配置:主键、非空、长度、关联
  9. 企业开发必备技能
  10. 最新版本:EF Core 9.0(对应 .NET 9)