EF迁移命令
EF遷移設(shè)置的最后一步是在包管理器控制臺(tái)中輸入命令“add-migration InitialMigration -IgnoreChanges”。“InitialMigration”(高亮的黃色)是您想要給當(dāng)前遷移的名稱(chēng),“IgnoreChanges”句柄是告訴EF Migrations您想要忽略當(dāng)前數(shù)據(jù)庫(kù):這意味著您希望EF忽略所有現(xiàn)有表,以便不會(huì)為現(xiàn)有表生成腳本。
enable-migrations
update-database
獲取遷移的腳本
在運(yùn)行 Update-Database 的時(shí)候,使用參數(shù) -Script 。
-SourceMigration:$InitialDatabase 用來(lái)指定起始的版本, -TargetMigration:"AddPostAbstract" 用來(lái)指定目標(biāo)版本。
Update-Database to bring the database up-to-date. This time let’s specify the –Verbose flag so that you can see the SQL that Code First Migrations is running.
https://msdn.microsoft.com/en-us/data/jj591621.aspx#script
1.Add-Migration Initia-IgnoreChanges?生成已有數(shù)據(jù)庫(kù)初始化代碼
2.update-database -verbose 升級(jí)數(shù)據(jù)庫(kù)并顯示sql語(yǔ)句
3.Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs"? 這個(gè)是生成兩次遷移的sql語(yǔ)句,TargetMigration省略是到最新
4.simplemembership的數(shù)據(jù)庫(kù)沒(méi)有migration表 所以遷移的時(shí)候如果丟失了遷移類(lèi)會(huì)很麻煩,建議手工修改即可。
5.context的靜態(tài)構(gòu)造函數(shù)中可以設(shè)置數(shù)據(jù)庫(kù)初始化器(用于調(diào)試)
| 1 2 3 4 5 6 7 8 9 10 | static PortalContext() { ????Database.SetInitializer<PortalContext>(null); //DropCreateDatabaseIfModelChanges //CreateDatabaseIfNotExists //DropCreateDatabaseAlways //MigrateDatabaseToLatestVersion } |
6.Get-Migrations?獲取已經(jīng)應(yīng)用的遷移
7.Enable-Migrations
在Package Manager Console中執(zhí)行Enable-Migrations啟動(dòng)遷移。
執(zhí)行g(shù)et-help Enable-Migrations –detailed?查看Enable-Migrations的詳細(xì)用法。
-ContextTypeName 指定要使用的Context
-EnableAutomaticMigrations 啟動(dòng)自動(dòng)遷移
-ProjectName 指定搭建的遷移類(lèi)添加到的項(xiàng)目
-StartUpProjectName 指定使用的配置文件所在的項(xiàng)目
-ConnectionStringName 指定使用配置文件中連接字符串的名稱(chēng)
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱(chēng)
8.Add-Migration
在Package Manager Console中執(zhí)行Add-Migration搭建掛起的Model變化遷移腳本。
執(zhí)行g(shù)et-help Add-Migration –detailed查看Add-Migration的詳細(xì)用法。
-Name 指定自定義腳本的名稱(chēng)
-Force
-ProjectName
-StartUpProjectName
-ConfigurationTypeName 指定使用的遷移配置
-IgnoreChanges 忽略檢測(cè)到掛起的model改變,創(chuàng)建一個(gè)空的遷移。這個(gè)選項(xiàng)可用來(lái)為已有的數(shù)據(jù)庫(kù)啟用遷移創(chuàng)建一個(gè)初始的,空的遷移。
-ConnectionStringName 指定使用配置文件中連接字符串的名稱(chēng)
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱(chēng)
9.Update-Database
在Package Manager Console中執(zhí)行Update-Database將掛起的遷移更新到數(shù)據(jù)庫(kù)。
執(zhí)行g(shù)et-help Update-Database -detailed查看Add-Migration的詳細(xì)用法。
-SourceMigration?只有-Script打開(kāi)時(shí)才有效。指定遷移的名稱(chēng)用作更新的起點(diǎn)。忽略則使用最后一次應(yīng)用的遷移。
-TargetMigration 指定將數(shù)據(jù)庫(kù)更新到哪個(gè)遷移的名稱(chēng)。
-Script 生成SQL腳本
-Force
-ProjectName
-StartProjectName
- ConfigurationTypeName
-ConnectionStringName 指定使用配置文件中連接字符串的名稱(chēng)
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱(chēng)
?http://blog.csdn.net/foren_whb/article/details/45576853
?
?
?
?
?
Context構(gòu)造函數(shù)
不檢查_(kāi)_MigrationHistory 取消當(dāng)數(shù)據(jù)庫(kù)模型發(fā)生改變時(shí)刪除當(dāng)前數(shù)據(jù)庫(kù)重建新數(shù)據(jù)庫(kù)的設(shè)置。
Database.SetInitializer<Context>(null);
重新創(chuàng)建數(shù)據(jù)庫(kù)
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());?
重建數(shù)據(jù)庫(kù)運(yùn)行,生產(chǎn)環(huán)境此法嚴(yán)禁使用。
遷移方法1:
AutomaticMigrationsEnabled=true;自動(dòng)遷移
Enable-Migrations 啟用遷移
Add-Migration 為掛起的Model變化添加遷移腳本
Update-Database 將掛起的遷移更新到數(shù)據(jù)庫(kù)
Update-Database -Verbose 將模型更新到數(shù)據(jù)庫(kù)中并顯示更新腳本,將更新腳本復(fù)制下來(lái)在生產(chǎn)環(huán)境中運(yùn)行
Get-Migrations 獲取已經(jīng)應(yīng)用的遷移
AutomaticMigrationsEnabled=false;非自動(dòng)遷移
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConnectionStringName <String>] [-Force] [<CommonParameters>]
ContextTypeName:項(xiàng)目繼承自DBContext的類(lèi)名字。
EnableAutomaticMigrations:開(kāi)啟自動(dòng)遷移。
ProjectName:存放DBContext類(lèi)的項(xiàng)目名稱(chēng)。
StartUpProjectName:解決方案中啟動(dòng)項(xiàng)目的名稱(chēng),作用是調(diào)用該項(xiàng)目下的連接字符串。
ConnectionStringName:連接字符串名稱(chēng)
上面五個(gè)參數(shù)是解決問(wèn)題必須的,其它的無(wú)關(guān)緊要。
例如:
Enable-Migrations -ContextTypeName "MVCCodeFirst.BlogEntities" -ProjectName "MVCCodeFirst" -StartUpProjectName "MVCCodeFirst" -ConnectionStringName "BlogEntities" -Verbose
依次填好之后,問(wèn)題解決。
同樣的在Add-Migration、Update-Database的時(shí)候也需要填寫(xiě)相應(yīng)的參數(shù)。否則會(huì)出現(xiàn)同樣錯(cuò)誤。
例如:
Add-Migration -Name "EditCST_DevicePhoto" ?-ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" -Verbose
Update-Database -Script -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" ?-Verbose
遷移方法2:
生產(chǎn)環(huán)境中__MigrationHistory表刪除,將生產(chǎn)環(huán)境中的表與模型更新成一致。
總結(jié)
- 上一篇: 5G频谱相争“兵戎相见”各相部署风起云涌
- 下一篇: LINUX中常用操作命令