Tim's Blog

Tim's Blog

VS2022 + EF Core 操作数据库教程

2025-07-12

VS2022 + EF Core 操作数据库教程

本文适合使用 Visual Studio 2022 的 .NET 开发者,详细讲解如何用 Entity Framework Core 操作数据库,支持 Code-FirstDatabase-First


📖 什么是 Entity Framework Core?

Entity Framework Core(EF Core)是 Microsoft 提供的轻量级、跨平台 ORM(对象关系映射)框架。
你可以通过 EF Core 直接用 C# 对象 操作数据库,而不需要手写 SQL 语句。


🛠 环境准备

  1. Visual Studio 2022(安装最新 .NET 6/7 SDK)
  2. 安装数据库(SQL Server / MySQL / SQLite 均可)
  3. 安装 NuGet 包管理器支持(VS 自带)

📦 安装 EF Core

打开 Visual Studio 2022 项目,在 工具 → NuGet 包管理器 → 包管理器控制台 输入:

📌 SQL Server

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools

📌 MySQL

Install-Package Pomelo.EntityFrameworkCore.MySql

📌 SQLite

Install-Package Microsoft.EntityFrameworkCore.Sqlite

✨ 创建示例项目

1️⃣ 新建控制台项目

  • 在 VS2022 创建一个 .NET 6/7 控制台应用
  • 项目名称:EfCoreDemo

2️⃣ 定义实体类 (Model)

创建一个新文件 User.cs

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

3️⃣ 定义 DbContext

创建 AppDbContext.cs

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        // SQL Server 连接字符串
        options.UseSqlServer("Server=localhost;Database=EfCoreTestDb;Trusted_Connection=True;");
    }
}

⚠️ 修改 ServerDatabase 为你自己的数据库信息。


🚀 Code-First 创建数据库

📌 生成数据库迁移

在包管理器控制台运行:

Add-Migration InitialCreate

📌 更新数据库

Update-Database

执行后会在数据库中生成名为 EfCoreTestDb 的数据库和 Users 表。


🔥 CRUD 操作示例

✅ 新增数据

using (var db = new AppDbContext())
{
    var user = new User { Name = "Tim", Email = "tim@example.com" };
    db.Users.Add(user);
    db.SaveChanges();
    Console.WriteLine($"新增用户:{user.Name}");
}

✅ 查询数据

using (var db = new AppDbContext())
{
    var users = db.Users.ToList();
    foreach (var user in users)
    {
        Console.WriteLine($"{user.Id} - {user.Name} - {user.Email}");
    }
}

✅ 更新数据

using (var db = new AppDbContext())
{
    var user = db.Users.FirstOrDefault();
    if (user != null)
    {
        user.Email = "newemail@example.com";
        db.SaveChanges();
        Console.WriteLine("已更新邮箱");
    }
}

✅ 删除数据

using (var db = new AppDbContext())
{
    var user = db.Users.FirstOrDefault();
    if (user != null)
    {
        db.Users.Remove(user);
        db.SaveChanges();
        Console.WriteLine("已删除用户");
    }
}

🌱 Database-First(反向生成模型)

如果已有数据库,可以用 Scaffold 命令生成模型:

Scaffold-DbContext "Server=localhost;Database=EfCoreTestDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

⚠️ 注意事项

  • 连接字符串安全:生产环境请用配置文件或环境变量保存连接字符串。
  • DbContext 生命周期:Web 项目建议用 依赖注入 (DI) 管理 DbContext。
  • 迁移管理:多个开发者协作时需谨慎合并迁移文件。

🏁 总结

通过 EF Core,你可以用最少的代码实现数据库 CRUD 操作,避免手写 SQL。无论是 Code-First 还是 Database-First,EF Core 都能大幅提高开发效率。


📌 参考资料