![](/img/trans.png)
[英]EF Add-Migration indicates “No pending explicit migrations” but Update-Database complains “..there are pending changes”
[英]EF6 + SQL Server CE + two contexts+ CodeFirst Migrations from code - Detect Pending Changes after Add-Migration
實體框架6.0.2。 .Net 4.我正嘗試從代碼更新SQL Server CE 4.0數據庫,因此當發布新版本的應用程序時,數據庫將自動升級。
項目中有兩個數據上下文,它們針對兩個不同的數據庫。 這就是我要更新其中之一的操作:
Private Sub UpdateDatabase(connectionString As String)
Dim config As DbMigrationsConfiguration(Of MainDBContext) = New DbMigrationsConfiguration(Of MainDBContext)()
config.TargetDatabase = New System.Data.Entity.Infrastructure.DbConnectionInfo(connectionString, "System.Data.SqlServerCe.4.0")
config.ContextKey = "MyProject.MainDBContext"
Dim migrator As DbMigrator = New DbMigrator(config)
migrator.Update()
End Sub
來自Update方法的消息是,有待更改,因此我必須運行“添加遷移”或啟用“自動遷移”。 但是,已經運行了Add-Migration,並且當我允許自動遷移時,Update嘗試創建數據庫中已經存在的表。
像這樣被調用時,運行Update-Database可以正常工作:
Update-Database -configuration MyProject.MigrationsMainDb.Configuration -Verbose
我檢查了UpdateDatabase函數中使用的連接字符串是否與配置文件(由Update-Database使用)中的連接字符串相同。 我也嘗試不設置ContextKey屬性,但是沒有區別。
我做錯了什么嗎? 為什么遷移者認為有待處理的更新,但是Update-Database很好...?
我成功了 我意識到,與其創建“通用”配置類,不如創建由Enable-Migrations命令添加到項目中的配置類。 因此,代碼已更改為以下內容:
Private Sub UpdateDatabase(connectionString As String)
Dim config As MigrationsMainDb.Configuration = New MigrationsMainDb.Configuration()
config.TargetDatabase = New System.Data.Entity.Infrastructure.DbConnectionInfo(connectionString, "System.Data.SqlServerCe.4.0")
Dim migrator As DbMigrator = New DbMigrator(config)
migrator.Update()
End Sub
並且此更改導致配置對象的屬性設置正確。 例如,MigrationsDirectory屬性,之前未設置為應設置的屬性。 這可能是問題的原因-遷移器未找到遷移(在錯誤的目錄中查找遷移),並假定必須將整個模型應用於數據庫。
進行此更改后,我仍然有一個小故障,即將進行更改。 在Visual Studio中,文件看起來像已修改,在類中具有一個額外的(測試)屬性,但是當我嘗試刪除多余的行時,我收到了來自VS的消息,例如“在master上編輯”或類似的消息。 我關閉了文件並重新打開-多余的屬性消失了。 我想這與git有關,檢查分支和VS無法正確刷新文件嗎? 不太確定。 但是一旦該行不再存在並且修改的代碼就位,Update函數便開始正常工作。
現在,更新將更新現有數據庫並成功創建新數據庫。 太好了:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.