asp.net mvc CodeFirst模式數(shù)據(jù)庫遷移步驟詳解
利用Code First模式構(gòu)建好基本的類后,項(xiàng)目也開始搭建完畢并成功運(yùn)行,而且已經(jīng)將數(shù)據(jù)庫表結(jié)構(gòu)自動(dòng)生成了。
但是,我有新的類要加入,有字段需要修改,那怎么辦呢,刪庫,跑路 ? 哈哈
利用數(shù)據(jù)庫遷移,將原有結(jié)構(gòu)不改動(dòng),將新建類進(jìn)行單獨(dú)建表操作,或者是已有數(shù)據(jù)庫表,改變字段,那就修改表。
遷移步驟:
1.打開程序包管理器控制臺(tái):工具->NuGet包管理器->程序包管理器控制臺(tái).(當(dāng)然還有其它方式也可以打開,我比較喜歡這種)
點(diǎn)擊后將彈出程序包管理器控制臺(tái)
極其要注意的是默認(rèn)項(xiàng)目!??!
2.啟動(dòng)數(shù)據(jù)庫遷移,執(zhí)行命令:enable-migrations
由于Models不一定就是直接利用項(xiàng)目中已有的文件夾Models,從而當(dāng)你選中啟動(dòng)項(xiàng)目為asp.net mvc 框架類型時(shí),此處將會(huì)報(bào)錯(cuò)
具體來看我當(dāng)前項(xiàng)目的分布情況:
我將模型分離出來了,以至于當(dāng)我默認(rèn)選中SearchEngine為啟動(dòng)項(xiàng)目時(shí),在程序包管理器控制臺(tái)中輸入的第一個(gè)命令就會(huì)報(bào)錯(cuò)
解決方案:選中默認(rèn)項(xiàng)目,選擇為DbContext所在的項(xiàng)目,此處我的是類庫
成功操作會(huì)如下提示:
并且在DbContext同級(jí)目錄下增加了migrations目錄
3.開始數(shù)據(jù)庫遷移命令
1.Add-migration [自定義版本名稱]
輸入add-migrationupdateorderheader
2.update-database
輸入update-database
此處如果和我一樣將DbContext單獨(dú)分割出來的需要注意,需要在當(dāng)前類庫的配置文件中加上數(shù)據(jù)庫的連接地址
如果是直接在asp.net mvc框架中的Models中加入的DbContext,則可不必,會(huì)直接讀取Web.Config文件中的連接字符串
等待命令執(zhí)行中......
出現(xiàn)異常了
開始尋找我電腦中的SQL Server Configuration Manage ,如果有則打開,找到
配置TCP/IP協(xié)議為已啟用即可。
我的本地沒有該工具,只能通過如下方式找到該處
點(diǎn)擊我的電腦右鍵->管理->服務(wù)和應(yīng)用程序->SQLServer配置管理器 ( 兩次找這工具都沒找到,貌似都是直接從這解決的)
重新輸入命令,等待執(zhí)行
初步成功
由于數(shù)據(jù)庫中有些表無需更改
我們可以在migrations目錄中,更改需要增加或修改的具體表
通過修改其中的CreateTable/DropTable,可以控制哪些表需要改動(dòng)
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.修改代碼配置,實(shí)現(xiàn)之后的操作沒那么麻煩
修改migrations目錄中的Configuration.cs文件,開啟自動(dòng)遷移
5.在項(xiàng)目Global.asax的Application_Start中加上如下代碼行:
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<SAssassin.EF.Model.CodeFirst, SAssassin.EF.Model.Migrations.Configuration>());
到此,數(shù)據(jù)庫遷移工作已經(jīng)完畢了。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET MVC把數(shù)據(jù)庫中枚舉項(xiàng)的數(shù)字轉(zhuǎn)換成文字
- 使用EF Code First搭建簡易ASP.NET MVC網(wǎng)站并允許數(shù)據(jù)庫遷移
- asp.net實(shí)現(xiàn)的MVC跨數(shù)據(jù)庫多表聯(lián)合動(dòng)態(tài)條件查詢功能示例
- asp.net mvc 從數(shù)據(jù)庫中讀取圖片的實(shí)現(xiàn)代碼
- asp.net MVC 根據(jù)菜單樹類別不同動(dòng)態(tài)加載視圖的實(shí)現(xiàn)步驟
- ASP.NET?MVC使用jQuery的Load方法加載靜態(tài)頁面及注意事項(xiàng)
- ASP.NET Mvc開發(fā)之EF延遲加載
- ASP.NET MVC懶加載如何逐步加載數(shù)據(jù)庫信息
相關(guān)文章
C#頁碼導(dǎo)航顯示及算法實(shí)現(xiàn)代碼
C#頁碼導(dǎo)航算法要求:頁數(shù)小于等于1時(shí)不顯示;頁數(shù)大于10時(shí),自動(dòng)縮短,需要的朋友可以了解下2012-12-12在.ashx文件中獲取cookies值實(shí)現(xiàn)代碼
.ashx文件中獲取cookies值對(duì)于一些高手們就不多說了,至于一些小白們還是有必要多多學(xué)習(xí)啊,好了話不多說,看代碼,感興趣的你可不要錯(cuò)過了哈2013-02-02.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧
這篇文章主要介紹了.NET使用結(jié)構(gòu)體替代類提升性能優(yōu)化的技巧,使用結(jié)構(gòu)體替代類有什么好處呢?在什么樣的場景需要使用結(jié)構(gòu)體來替代類呢?今天的文章為大家一一解答,需要的朋友可以參考下2022-05-05微信公眾平臺(tái)開發(fā)之獲得ACCESSTOKEN .Net代碼解析
這篇文章主要為大家詳細(xì)解析了微信公眾平臺(tái)開發(fā)之獲得ACCESSTOKEN .Net代碼,感興趣的小伙伴們可以參考一下2016-06-06ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-05-05