Code First項目Migrations


關於Enable-Migrations指令說明
我們知道,Enable-Migrations的作用是在Code First項目中使用數據遷移,
通過get-help Enable-Migrations查看它的語法:

    Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <
    String>] [-ContextProjectName <String>] [-ConnectionStringName <String>] [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<Co
    mmonParameters>]

    Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <
    String>] [-ContextProjectName <String>] -ConnectionString <String> -ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] [-AppDomainB
    aseDirectory <String>] [<CommonParameters>]

關於這個指令的說明:
通過在項目中構建遷移配置類啟用遷移。如果目標數據庫由初始化程序創建,將創建初始遷移(除非通過EnableAutomaticMigrations參數啟用自動遷移)。

它有三個相關的指令可以查看更為具體的信息:
若要查看示例,請鍵入: "get-help Enable-Migrations -examples".
有關詳細信息,請鍵入: "get-help Enable-Migrations -detailed".
若要獲取技術信息,請鍵入: "get-help Enable-Migrations -full".


下面我們輸入get-help Enable-Migrations -examples指令,查看它有幾種使用方式:
在一個Code First項目中啟用數據遷移的方式有以下三種:
-------------------------- 示例 1 --------------------------
C:\PS>Enable-Migrations

//Scaffold a migrations configuration in a project with only one context
在僅具有一個上下文的項目中支架遷移配置

-------------------------- 示例 2 --------------------------
C:\PS>Enable-Migrations -Auto

//Scaffold a migrations configuration with automatic migrations enabled for a project with only one context
使用僅具有一個上下文的項目啟用自動遷移的遷移配置
-------------------------- 示例 3 --------------------------
C:\PS>Enable-Migrations -ContextTypeName MyContext -MigrationsDirectory DirectoryName

//Scaffold a migrations configuration for a project with multiple contexts This scaffolds a migrations configuration for MyContext and will put the configuration and subsequent configurations in a new directory called "DirectoryName"
支持具有多個上下文的項目的遷移配置支持MyContext的遷移配置,並將配置和后續配置放入名為“DirectoryName”的新目錄中

數據遷移步驟:
1、Enable-Migrations
a.在項目根目錄下創建了一個Migrations文件夾
b.在Migrations文件夾下新建一個Configuration.cs文件。

 

 
(add-migration InitialCreate)
如果前面沒修改web.config的數據庫名, 執行enable-migrations指令后,Migrations將會找到已有的數據庫MVCDemo然后自動執行add-migration指令。

2、Add-Migration FirstMigration
執行 add-migration時,同樣在Migrations文件夾里面,產生一個<timestamp>_InitialCreate.cs的文件。
里面兩個方法,Up和Down:

 
Up方法創建數據庫表,Down方法刪除表。

3、Update-Database
update-database指令調用了Up方法來新建database的表(和data model entity set對應), 然后調用Seed方法來填充測試數據。

 
如果更新數據庫存在沖突而不能執行更新,可以添加 -Force強制執行,例如:“Update-Database -Force”


設置自動遷移
每次都通過控制台來進行遷移太過麻煩,可以設置為自動遷移。
有以下兩個參數可以對自動遷移進行設置:
  1. AutomaticMigrationsEnabled:獲取或設置 指示遷移數據庫時是否可使用自動遷移的值。
  2. AutomaticMigrationDataLossAllowed:獲取或設置 指示是否可接受自動遷移期間的數據丟失的值。如果設置為false,則將在數據丟失可能作為自動遷移一部分出現時引發異常。
修改遷移的Configuration類如下:
namespace GMF.Demo.Core.Data.Migrations
{
    internal sealed class Configuration : DbMigrationsConfiguration<DemoDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;

        }

        protected override void Seed(DemoDbContext context)
        {
            List<Member> members = new List<Member>
            {
                new Member { UserName = "admin", Password = "123456", Email = "admin@gmfcn.net", NickName = "管理員" },
                new Member { UserName = "gmfcn", Password = "123456", Email = "mf.guo@qq.com", NickName = "郭明鋒" }
            };
            DbSet<Member> memberSet = context.Set<Member>();
            memberSet.AddOrUpdate(m => new { m.Id }, members.ToArray());
        }
    }
}
修改數據庫初始化策略如下:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoDbContext, Configuration>());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM