EntityFramework 啟用遷移 Enable-Migrations 報異常 "No context type was found in the assembly"
以前做專案的時候,沒有采用分類庫的形式,所以遷移一致非常順利,沒有出現過任何狀況。
這次做專案稍微有點大,必須要分類庫才方便開發維護。
在解決方案中啟用專案EntityFramework遷移時卻發生了異常。
異常說在我的專案中沒有找到DBContext類。
這個DBContext類確實沒有放在啟動專案下面,是另外建立了一個獨立的類庫來存放。
在啟動專案中引用了卻無法找到。。。
檢視get-help Enable-Migrations幫助,發現啟用遷移命令帶了幾個引數。
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConnectionStringName <String>] [-Force] [<CommonParameters>]
ContextTypeName:專案繼承自DBContext的類名字。
EnableAutomaticMigrations:開啟自動遷移。
ProjectName:存放DBContext類的專案名稱。
StartUpProjectName:解決方案中啟動專案的名稱,作用是呼叫該專案下的連線字串。
ConnectionStringName:連線字串名稱
上面五個引數是解決問題必須的,其它的無關緊要。
例如:
Enable-Migrations -ContextTypeName "DBAccessLib.TJSSDBContext" -ProjectName "DBAccessLib" -StartUpProjectName "WebSite" -ConnectionStringName "TJSSDBContext" -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
使用過程中注意去掉 script引數
___________________________________________________________________________________________________
ABP專案中
update-database -ProjectName "IB1000Project.EntityFramework" -StartUpProjectName "IB1000Project.Web" -ConnectionStringName "default" -Verbose
Using StartUp project 'IB1000Project.Web'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'ib1000Project' (DataSource: 192.168.1.145, Provider: System.Data.SqlClient, Origin: Explicit).
No pending explicit migrations.
Running Seed method.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
update-database -ProjectName "IB1000Project.EntityFramework" -StartUpProjectName "IB1000Project.Web" -ConnectionStringName "default" -Verbose