Entity Framework Core Tutorial 遷移
遷移提供了一種方法,可以將架構更改逐步應用於數據庫,以使其與EF Core模型保持同步,同時保留數據庫中的現有數據。
- 開始開發應用程序時,您很可能會看到模型中的更改需求發生變化。
- 當模型發生變化時,我們需要使數據庫與模型保持同步。
- 遷移功能使您可以對模型進行更改,然後將這些更改傳播到數據庫模式。
假設我們有一個包含三個實體的簡單模型。
public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public virtual List<Invoice> Invoices { get; set; } } public class Invoice { public int Id { get; set; } public DateTime Date { get; set; } public int CustomerId { get; set; } [ForeignKey("CustomerId")] public virtual Customer Customer { get; set; } public virtual List<InvoiceItem> Items { get; set; } } public class InvoiceItem { public int InvoiceItemId { get; set; } public int InvoiceId { get; set; } public string Code { get; set; } [ForeignKey("InvoiceId")] public virtual Invoice Invoice { get; set; } }
這是上下文類。
public class MyContext : DbContext { public DbSet<Customer> Customers { get; set; } public DbSet<Invoice> Invoices { get; set; } public DbSet<InvoiceItem> InvoiceItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .UseSqlServer(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=CustomerDB;"); } }
添加遷移
您可以通過在程序包管理器控制台中添加初始遷移命令來使用遷移來創建初始數據庫。
PM> Add-Migration InitialCreate
InitialCreate是遷移名稱,由您指定的名稱取決於您。
初始遷移命令將在Migrations文件夾下向項目添加三個文件。
- _InitialCreate.cs:它是主要的遷移文件,它在
Up()
方法中應用遷移並將其恢復為Down()
方法所需的操作。 - _InitialCreate.Designer.cs:它是遷移元數據文件,包含EF使用的信息。
- MyContextModelSnapshot.cs:它是模型的快照,用於確定添加下一次遷移時發生的變化。
現在,要將遷移應用於數據庫以創建架構,請運行以下命令。
PM> Update-Database
您可以看到使用三個表創建的數據庫。
添加另一個遷移
現在假設您要將PhoneNumber屬性添加到客戶實體。
public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string PhoneNumber { get; set; } public virtual List<Invoice> Invoices { get; set; } }
更改EF Core模型後,數據庫架構將不同步。要使其更新,我們需要使用Add-Migration
命令添加另一個遷移,並調用此遷移AddPhoneNumber 。
PM> Add-Migration AddPhoneNumber
您的遷移文件將如下所示。
public partial class AddPhoneNumber : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn<string>( name: "PhoneNumber", table: "Customers", nullable: true); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "PhoneNumber", table: "Customers"); } }
使用以下命令將遷移應用於數據庫。
PM> Update-Database
刪除遷移
有時您會添加遷移並意識到在應用之前需要對EF Core模型進行其他更改。要刪除上次遷移,可以使用以下命令。
PM> Remove-Migration
還原遷移
如果已將多個遷移應用於數據庫但需要還原它,則可以使用Update-Database
命令,但也可以指定要回滾到的遷移的名稱。
PM> Update-Database LastGoodMigration