︿
Top

2014年7月27日 星期日

在 ASP.NET MVC 4 Code First + Entity Framework 5 環境下, 執行 Update-Database 發生 0x8004000C (OLE_E_PROMPTSAVECANCELLED) 錯誤

緣起

最近在研讀 Will 保哥 (黃保翕) 所著的 ASP.NET MVC 4 開發實戰 (連結為天瓏網路書店) 一書, 其第五章的內容, 主要以 Model 為主 (with Code First + Entity Framework).
筆者發現在第 185 頁的指令裡, 都會出現下的錯誤; 所以查了一下資料 ...
System.Runtime.InteropServices.COMException (0x8004000C): 使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))


問題呈現

如以下的操作及錯誤訊息:

PM> Update-Database -SourceMigration 201407170454421_InitialCreate -TargetMigration 201407170829018_AddUsernamePassword -Script
正在套用以程式碼為基礎的移轉: [201407170829018_AddUsernamePassword]。
正在套用以程式碼為基礎的移轉: 201407170829018_AddUsernamePassword。
System.Runtime.InteropServices.COMException (0x8004000C): 使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
   於 EnvDTE.ItemOperations.OpenFile(String FileName, String ViewKind)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Extensions.ProjectExtensions.NewSqlFile(Project project, String contents)
   於 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   於 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
PM> Update-Database -TargetMigration 201407170454421_InitialCreate -Script
正在還原移轉: [201407170829018_AddUsernamePassword]。
正在還原以程式碼為基礎的移轉: 201407170829018_AddUsernamePassword。
System.Runtime.InteropServices.COMException (0x8004000C): 使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
   於 EnvDTE.ItemOperations.OpenFile(String FileName, String ViewKind)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Extensions.ProjectExtensions.NewSqlFile(Project project, String contents)
   於 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   於 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
PM> Update-Database -TargetMigration $InitialDatabase -Script
沒有擱置中的程式碼移轉。
System.Runtime.InteropServices.COMException (0x8004000C): 使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
   於 EnvDTE.ItemOperations.OpenFile(String FileName, String ViewKind)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
   於 System.Data.Entity.Migrations.Extensions.ProjectExtensions.NewSqlFile(Project project, String contents)
   於 System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   於 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
使用者取消 [無法儲存] 對話方塊 (發生例外狀況於 HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))

處理方式

找到一篇文章 EF5 Migration Update-Database -Script Error , 有提到安裝 SQL Server Data Tools for Visual Studio 2012 可以解決該問題.

經實際執行後, 確定可解決該問題.


總結

終於找到了解決方式, 且看來可正常運作 ^^
其中, 在這個過程裡, 因為有部份含有中文的錯誤訊息, 有時, 要找國外的相關資料, 還真的有點麻煩, 因此, 經由 Will 保哥的一篇文章 介紹好用網站:Microsoft | 語言入口網站 (微軟的翻譯對照表) 找到了 Microsoft 語言入口網站, 可以查到錯誤的中文訊息所對應的英文訊息. 不然, 可能真的要自行準備一個英文環境的 VM, 才能找到對應的英文訊息, 那就很累了 ...

參考文件



.

沒有留言:

張貼留言