原文鏈接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 Code-First系列文章目錄: 1 翻譯系列:什麼是Code First(EF 6 Code F ...
原文鏈接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx
EF 6 Code-First系列文章目錄:
- 1 翻譯系列:什麼是Code First(EF 6 Code First 系列)
- 2.翻譯系列:為EF Code-First設置開發環境(EF 6 Code-First系列)
- 3.翻譯系列:EF Code-First 示例(EF 6 Code-First系列)
- 4.翻譯系列:EF 6 Code-First預設約定(EF 6 Code-First系列)
- 5.翻譯系列:EF 6中資料庫的初始化(EF 6 Code-First 系列)
- 6.翻譯系列:EF 6 Code-First中資料庫初始化策略(EF 6 Code-First系列
- 7.翻譯系列:EF 6中的繼承策略(EF 6 Code-First 系列)
- 8.翻譯系列: EF 6中配置領域類(EF 6 Code-First 系列)
- 9.翻譯系列:EF 6以及EF Core中的數據註解特性(EF 6 Code-First系列)
- 9.1 翻譯系列:數據註解特性之----Table【EF 6 Code-First 系列】
- 9.2 翻譯系列:數據註解特性之---Column【EF 6 Code First系列】
- 9.3 翻譯系列:數據註解特性之Key【EF 6 Code-First 系列】
- 9.4 翻譯系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
- 9.5 翻譯系列:數據註解之ForeignKey特性【EF 6 Code-First系列】
- 9.6 翻譯系列:數據註解之Index特性【EF 6 Code-First系列】
- 9.7 翻譯系列:EF數據註解特性之--InverseProperty【EF 6 Code-First系列】
- 9.8 翻譯系列:數據註解特性之--Required 【EF 6 Code-First系列】
- 9.9 翻譯系列:數據註解特性之--MaxLength 【EF 6 Code-First系列】
- 9.10 翻譯系列:EF數據註解特性之StringLength【EF 6 Code-First系列】
- 9.11 翻譯系列:數據註解特性之--Timestamp【EF 6 Code-First系列】
- 9.12 翻譯系列:數據註解特性之ConcurrencyCheck【EF 6 Code-First系列】
- 10.翻譯系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
- 10.1.翻譯系列:EF 6中的實體映射【EF 6 Code-First系列】
- 10.2.翻譯系列:使用Fluent API進行屬性映射【EF 6 Code-First】
- 11.翻譯系列:在EF 6中配置一對零或者一對一的關係【EF 6 Code-First系列】
- 12.翻譯系列:EF 6 中配置一對多的關係【EF 6 Code-First系列】
- 13.翻譯系列:Code-First方式配置多對多關係【EF 6 Code-First系列】
- 14.翻譯系列:從已經存在的資料庫中生成上下文類和實體類【EF 6 Code-First系列】
- 15.翻譯系列:EF 6中的級聯刪除【EF 6 Code-First 系列】
- 16.翻譯系列:EF 6 Code -First中使用存儲過程【EF 6 Code-First系列】
- 17.翻譯系列:將Fluent API的配置遷移到單獨的類中【EF 6 Code-First系列】
- 18.翻譯系列:EF 6 Code-First 中的Seed Data(種子數據或原始測試數據)【EF 6 Code-First系列】
- 19.翻譯系列:EF 6中定義自定義的約定【EF 6 Code-First約定】
- 20.翻譯系列:Code-First中的資料庫遷移技術【EF 6 Code-First系列】
- 20.1翻譯系列:EF 6中自動數據遷移技術【EF 6 Code-First系列】
- 20.2.翻譯系列:EF 6中基於代碼的資料庫遷移技術【EF 6 Code-First系列】
- 21.翻譯系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】
Entity Framework介紹了自動遷移技術,所以每次實體發生改變的時候,你不用手動去處理資料庫遷移。
自動遷移技術可以通過在程式包管理控制臺中輸入並執行:enable-migrations命令做到。打開程式包管理控制台,輸入:enable-migrations –EnableAutomaticMigration:$true【確保預設的項目是你現在要執行的項目】
當命令執行成功之後,將會創建一個internal sealed Configuration
類,這個Configuration類繼承自DbMigrationConfiguration :
正如你在COnfiguration類的構造函數中看到的那樣,AutomaticMigrationsEnabled
被設置為true.
下一步,就是在上下文類中設置資料庫初始化策略為MigrateDatabaseToLatestVersion:
public class SchoolContext: DbContext
{
public SchoolDBContext(): base("SchoolDB")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, EF6Console.Migrations.Configuration>());
}
public DbSet<Student> Students { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
現在你就完成了自動化遷移技術的配置。當實體發生改變的時候,EF將會自動進行資料庫遷移。目前為止,我們只有一個Student實體,還有一個上下文類,我們運行項目看看生成的資料庫:
你將會發現EF API創建了__MigrationHistory
表和Students表。__MigrationHistory
包含了每次資料庫遷移的歷史記錄。
現在,你添加一個新的領域類實體,運行程式,會發現資料庫自動包含了所有實體所映射的表。你不用運行任何其他命令。
然而,這樣只是針對添加實體或者移除實體才有用,當你向實體中添加、修改或者刪除屬性的時候,並不起作用。刪除領域類的任何一個屬性,運行項目:
這樣是因為你將會丟失相應列的數據。為瞭解決這個,你需要在Configuration類的構造函數中,設置AutomaticMigrationDataLossAllowed
為true,並且設置AutomaticMigrationsEnabled = true。
為了瞭解更多enable-migrations命令的參數,可以執行get-help enable-migrations 或者get-help enable-migrations -detailed,你將會看到:
PM> get-help enable-migrations
NAME
Enable-Migrations
SYNOPSIS
Enables Code First Migrations in a project.
SYNTAX
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations]
[-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName
<String>] [-ContextProjectName <String>] [-ConnectionStringName <String>]
[-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>]
[<CommonParameters>]
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations]
[-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName
<String>] [-ContextProjectName <String>] -ConnectionString <String>
-ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>]
[-AppDomainBaseDirectory <String>] [<CommonParameters>]
DESCRIPTION
Enables Migrations by scaffolding a migrations configuration class in the project. If the
target database was created by an initializer, an initial migration will be created (unless
automatic migrations are enabled via the EnableAutomaticMigrations parameter).
RELATED LINKS
REMARKS
To see the examples, type: "get-help Enable-Migrations -examples".
For more information, type: "get-help Enable-Migrations -detailed".
For technical information, type: "get-help Enable-Migrations -full".