C# (.NET) 中的数据库迁移:Entity Framework 迁移

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 C# (.NET) 中使用 Entity Framework 进行数据库迁移



在开发 C# (.NET) 应用程序时,关键任务之一是同步数据模型(C# 类)和数据库架构。手动更改表、列和关系是一个耗时且容易出错的过程。解决这个问题的方法是数据库迁移,这是 Entity Framework (EF) Core 或 Entity Framework 6 的内置机制。迁移允许您根据代码中的更改自动将更改应用到数据库结构,同时保留现有数据。



什么是迁移以及为什么需要它们?



迁移是一组指令(C# 代码),描述如何将数据库架构从一个版本更改为另一个版本。开发人员无需手动编写 SQL 脚本,而是更改 C# 模型(例如,向类添加新属性),然后 EF 会生成一个迁移文件。然后,该文件将应用于数据库。



  • 自动化: 消除了手动编写 SQL 的需要。
  • 版本控制: 每个迁移都是一个带有时间戳的单独文件,允许回滚更改。
  • 数据安全: 添加列时,EF 不会删除现有行(除非另有指定)。
  • 协作: 所有团队成员应用相同的迁移,从而消除架构差异。


项目准备



要使用迁移,需要安装 Microsoft.EntityFrameworkCore.Tools 包(用于 EF Core)或 EntityFramework 包(用于 EF6)。通过 NuGet 安装:



// 对于 EF Core(通过 Package Manager Console)Install-Package Microsoft.EntityFrameworkCore.Tools

// 或者通过 .NET CLIdotnet add package Microsoft.EntityFrameworkCore.Tools


还需要一个继承自 DbContext 的数据库上下文。一个简单模型的示例:



public class Blog{    public int Id { get; set; }    public string Title { get; set; }    public string Content { get; set; }}

public class AppDbContext : DbContext{ public DbSet<Blog> Blogs { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\\\\mssqllocaldb;Database=MyBlogDb;Trusted_Connection=True;"); }}


创建第一个迁移



打开 Package Manager Console(在 Visual Studio 中:视图 -> 其他窗口 -> 包管理器控制台)或使用 .NET CLI。执行命令:



// 通过 PMCAdd-Migration InitialCreate

// 或者通过 CLIdotnet ef migrations add InitialCreate


执行后,项目中会出现一个 Migrations 文件夹,其中包含两个文件:

  • XXXXXXXXXXXXXX_InitialCreate.cs — 包含 Up()(更改什么)和 Down()(如何回滚)方法的迁移类。
  • AppDbContextModelSnapshot.cs — 当前模型的快照。


将迁移应用到数据库



要创建或更新数据库到最新版本,请执行:



// 通过 PMCUpdate-Database

// 通过 CLIdotnet ef database update


EF 将按顺序执行所有未应用的迁移。如果数据库不存在,则会自动创建。



添加新字段并创建迁移



假设我们决定向 Blog 模型添加一个 CreatedAt 属性:



public class Blog{    public int Id { get; set; }    public string Title { get; set; }    public string Content { get; set; }    public DateTime CreatedAt { get; set; } // 新字段}


现在创建一个新的迁移:



Add-Migration                    

推荐