2013-01-11 109 views
8

我們正在將部署一個簡單的ASP.NET MVC應用程序部署到我們的登臺服務器上,當EntityFramework嘗試遷移現有數據庫時,我們遇到以下錯誤。EntityFramework遷移嘗試創建現有數據庫

CREATE DATABASE permission denied in database 'master'. 

的情況如下:

  • 這是第一次遷移運行。
  • 數據庫已經存在(它實際上是一個Umbraco數據庫)。

它會出現在下面的方法(從的EntityFramework)返回false,當它顯然應該返回true:

System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists() 

數據庫初始化具有下面的代碼:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>()); 

自動遷移已關閉,因爲我們正在使用基於代碼的遷移。

connectionstring指向正確的數據庫,並且用戶對該數據庫具有db_owner權限。用戶無權訪問服務器上的其他表。

這是常見問題嗎?有沒有人知道這個解決方案?

Thnx!

+1

可以嘗試將它設置爲不主因爲這是系統數據庫的名稱,並可能導致問題的 –

+0

可能重複執行查詢[CREATE DATABASE permission denied in database'master'Entity Framework Migration](http://stackoverflow.com/questions/11814762/create-database-permission-denied-in-database-master-entity-framework-migratio) –

+0

數據庫連接字符串中的名稱不是主控(因爲這確實是一個系統數據庫)。這是一個現有的數據庫,用戶只擁有該數據庫的權限。 EntityFramework嘗試創建數據庫,因爲EnsureDatabaseExists報告沒有數據庫。之後,EF嘗試創建數據庫,但用戶沒有權限。但是,這不是問題。 EF未能檢測到數據庫實際上因爲某種原因而存在 –

回答

1

確保數據庫中存在 - 執行下面的腳本

IF db_id(N'MyDatabaseName') IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=N'MyDatabaseName' 

,它假定用戶權限查詢'sys.databases'爲DB的列表。 如果此查詢失敗--EF認爲數據庫尚未創建並嘗試再次創建。

確保 - 即執行遷移的用戶,能夠以上成功

+0

有用,但你是如何解決這個問題的?其次,我們能否讓EF停止這樣做,這對於一個安全的環境來說是不合適的:) –

+0

搞清楚了這一點 - hm ..使用了SSMS生成的標準SQL數據庫創建腳本中的一段SQL。我們如何阻止EF試圖創建數據庫?我想是的。只需創建一個自定義數據庫初始化程序,而不是依賴於開箱即用的默認實現 – Marty

相關問題