EF遷移設置的最后一步是在包管理器控制台中輸入命令“add-migration InitialMigration -IgnoreChanges”。“InitialMigration”(高亮的黃色)是您想要給當前遷移的名稱,“IgnoreChanges”句柄是告訴EF Migrations您想要忽略當前數據庫:這意味着您希望EF忽略所有現有表,以便不會為現有表生成腳本。
enable-migrations
update-database
獲取遷移的腳本
在運行 Update-Database 的時候,使用參數 -Script 。
-SourceMigration:$InitialDatabase 用來指定起始的版本, -TargetMigration:"AddPostAbstract" 用來指定目標版本。
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 生成已有數據庫初始化代碼
2.update-database -verbose 升級數據庫並顯示sql語句
3.Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs" 這個是生成兩次遷移的sql語句,TargetMigration省略是到最新
4.simplemembership的數據庫沒有migration表 所以遷移的時候如果丟失了遷移類會很麻煩,建議手工修改即可。
5.context的靜態構造函數中可以設置數據庫初始化器(用於調試)
1
2
3
4
5
6
7
8
9
10
|
static
PortalContext()
{
Database.SetInitializer<PortalContext>(
null
);
//DropCreateDatabaseIfModelChanges
//CreateDatabaseIfNotExists
//DropCreateDatabaseAlways
//MigrateDatabaseToLatestVersion
}
|
6.Get-Migrations 獲取已經應用的遷移
7.Enable-Migrations
在Package Manager Console中執行Enable-Migrations啟動遷移。
執行get-help Enable-Migrations –detailed 查看Enable-Migrations的詳細用法。
-ContextTypeName 指定要使用的Context
-EnableAutomaticMigrations 啟動自動遷移
-ProjectName 指定搭建的遷移類添加到的項目
-StartUpProjectName 指定使用的配置文件所在的項目
-ConnectionStringName 指定使用配置文件中連接字符串的名稱
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱
8.Add-Migration
在Package Manager Console中執行Add-Migration搭建掛起的Model變化遷移腳本。
執行get-help Add-Migration –detailed查看Add-Migration的詳細用法。
-Name 指定自定義腳本的名稱
-Force
-ProjectName
-StartUpProjectName
-ConfigurationTypeName 指定使用的遷移配置
-IgnoreChanges 忽略檢測到掛起的model改變,創建一個空的遷移。這個選項可用來為已有的數據庫啟用遷移創建一個初始的,空的遷移。
-ConnectionStringName 指定使用配置文件中連接字符串的名稱
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱
9.Update-Database
在Package Manager Console中執行Update-Database將掛起的遷移更新到數據庫。
執行get-help Update-Database -detailed查看Add-Migration的詳細用法。
-SourceMigration 只有-Script打開時才有效。指定遷移的名稱用作更新的起點。忽略則使用最后一次應用的遷移。
-TargetMigration 指定將數據庫更新到哪個遷移的名稱。
-Script 生成SQL腳本
-Force
-ProjectName
-StartProjectName
- ConfigurationTypeName
-ConnectionStringName 指定使用配置文件中連接字符串的名稱
-ConnectionString 指定使用的連接字符串
-ConnectionProviderName 指定連接字符串的provider名稱
http://blog.csdn.net/foren_whb/article/details/45576853
Context構造函數
不檢查__MigrationHistory 取消當數據庫模型發生改變時刪除當前數據庫重建新數據庫的設置。
Database.SetInitializer<Context>(null);
重新創建數據庫
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
重建數據庫運行,生產環境此法嚴禁使用。
遷移方法1:
AutomaticMigrationsEnabled=true;自動遷移
Enable-Migrations 啟用遷移
Add-Migration 為掛起的Model變化添加遷移腳本
Update-Database 將掛起的遷移更新到數據庫
Update-Database -Verbose 將模型更新到數據庫中並顯示更新腳本,將更新腳本復制下來在生產環境中運行
Get-Migrations 獲取已經應用的遷移
AutomaticMigrationsEnabled=false;非自動遷移
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConnectionStringName <String>] [-Force] [<CommonParameters>]
ContextTypeName:項目繼承自DBContext的類名字。
EnableAutomaticMigrations:開啟自動遷移。
ProjectName:存放DBContext類的項目名稱。
StartUpProjectName:解決方案中啟動項目的名稱,作用是調用該項目下的連接字符串。
ConnectionStringName:連接字符串名稱
上面五個參數是解決問題必須的,其它的無關緊要。
例如:
Enable-Migrations -ContextTypeName "MVCCodeFirst.BlogEntities" -ProjectName "MVCCodeFirst" -StartUpProjectName "MVCCodeFirst" -ConnectionStringName "BlogEntities" -Verbose
依次填好之后,問題解決。
同樣的在Add-Migration、Update-Database的時候也需要填寫相應的參數。否則會出現同樣錯誤。
例如:
Add-Migration -Name "EditCST_DevicePhoto" -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" -Verbose
Update-Database -Script -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" -Verbose
遷移方法2:
生產環境中__MigrationHistory表刪除,將生產環境中的表與模型更新成一致。