利用Code First模式構建好基本的類後,項目也開始搭建完畢併成功運行,而且已經將資料庫表結構自動生成了。 但是,我有新的類要加入,有欄位需要修改,那怎麼辦呢,刪庫,跑路 ? 哈哈 利用資料庫遷移,將原有結構不改動,將新建類進行單獨建表操作,或者是已有資料庫表,改變欄位,那就修改表。 遷移步驟: ...
利用Code First模式構建好基本的類後,項目也開始搭建完畢併成功運行,而且已經將資料庫表結構自動生成了。
但是,我有新的類要加入,有欄位需要修改,那怎麼辦呢,刪庫,跑路 ? 哈哈
利用資料庫遷移,將原有結構不改動,將新建類進行單獨建表操作,或者是已有資料庫表,改變欄位,那就修改表。
遷移步驟:
1.打開程式包管理器控制台:工具->NuGet包管理器->程式包管理器控制台.(當然還有其它方式也可以打開,我比較喜歡這種)
點擊後將彈出程式包管理器控制台
極其要註意的是預設項目!!!
2.啟動資料庫遷移,執行命令:enable-migrations
由於Models不一定就是直接利用項目中已有的文件夾Models,從而當你選中啟動項目為asp.net mvc 框架類型時,此處將會報錯
具體來看我當前項目的分佈情況:
我將模型分離出來了,以至於當我預設選中SearchEngine為啟動項目時,在程式包管理器控制台中輸入的第一個命令就會報錯
解決方案:選中預設項目,選擇為DbContext所在的項目,此處我的是類庫
成功操作會如下提示:
並且在DbContext同級目錄下增加了migrations目錄
3.開始資料庫遷移命令
1.Add-migration [自定義版本名稱]
輸入add-migration updateorderheader
2.update-database
輸入update-database
此處如果和我一樣將DbContext單獨分割出來的需要註意,需要在當前類庫的配置文件中加上資料庫的連接地址
如果是直接在asp.net mvc框架中的Models中加入的DbContext,則可不必,會直接讀取Web.Config文件中的連接字元串
等待命令執行中......
出現異常了
開始尋找我電腦中的SQL Server Configuration Manage ,如果有則打開,找到
配置TCP/IP協議為已啟用即可。
我的本地沒有該工具,只能通過如下方式找到該處
點擊我的電腦右鍵->管理->服務和應用程式->SQLServer配置管理器 ( 兩次找這工具都沒找到,貌似都是直接從這解決的)
重新輸入命令,等待執行
初步成功
由於資料庫中有些表無需更改
我們可以在migrations目錄中,更改需要增加或修改的具體表
通過修改其中的CreateTable/DropTable,可以控制哪些表需要改動
namespace SAssassin.EF.Model.Migrations { using System; using System.Data.Entity.Migrations; public partial class updateorderheader : DbMigration { public override void Up() { CreateTable( "dbo.MyFileInfoes", c => new { Id = c.Int(nullable: false, identity: true), FileName = c.String(), FileDescription = c.String(), FilePath = c.String(), FileType = c.Byte(nullable: false), FileSize = c.String(), FileStatus = c.Byte(nullable: false), IsPublic = c.Byte(nullable: false), UserId = c.String(), UserName = c.String(), CreateDate = c.DateTime(nullable: false), LastModityDate = c.DateTime(nullable: false), }) .PrimaryKey(t => t.Id); } public override void Down() { DropTable("dbo.MyFileInfoes"); } } }
4.修改代碼配置,實現之後的操作沒那麼麻煩
修改migrations目錄中的Configuration.cs文件,開啟自動遷移
5.在項目Global.asax的Application_Start中加上如下代碼行:
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<SAssassin.EF.Model.CodeFirst, SAssassin.EF.Model.Migrations.Configuration>());
到此,資料庫遷移工作已經完畢了。
2017-10-15,望技術有成後能回來看見自己的腳步。