2011-04-07 30 views
9

實體框架4.1代碼首先與SQLEXPRESSlocalhost很好。但是,我現在準備連接到常規SQL 2008 serverEF 4.1 CF:CREATE DATABASE權限在數據庫'master'中被拒絕

  1. 我創建了一個新的數據庫「NewEfDatabase」。

  2. 然後將我的「ApplicationServicesconnectionString改爲Web.config以指向具有集成安全性的新數據庫。

但後來我得到這個錯誤:

CREATE DATABASE permission denied in database 'master'.

所以......

一)什麼權限呢EF 4.1 CF需要在上述SQL服務器來完成其工作?

B)我可以安裝在SQL 2008一個空數據庫用於EF 4.1 CF,還是我要讓它做所有的工作給我嗎? (我不知道我的DBA會喜歡讓我的EF應用有權做任何特定數據庫外)

回答

13

你確定你的數據庫初始化器設置爲null在代碼:

Database.SetInitializer<MyDbContext>(null); 

如果初始化程序可能嘗試刪除或創建新數據庫,則爲所有內置實現。您收到的錯誤表明EF嘗試刪除/創建數據庫,但無權在您的SQL Server實例中這樣做。上面的這一行是避免這種情況的唯一選擇,無論如何,在您不希望意外刪除(由於模型更改或其他原因)的情況下,適合(我認爲即使絕對必要)也適用於實況環境。

+0

不,我還沒有試過。我會放棄它。在那種情況下,我應該從我本地的SQLEXPRESS遷移我的數據和模式嗎?我認爲它可以在我的目標位置建立數據庫。但忘記了它執行的下降創建步驟。 – 2011-04-07 16:59:22

+1

@Dan:是的,如果將初始化程序設置爲「null」,則必須將DB遷移到目標實例。在這種情況下,DB模式和EF模式必須匹配,那麼,英孚將不會更新或重新架構,可能會拋出異常,如果架構和模式不匹配。 – Slauma 2011-04-07 17:04:03

+1

我處理這個問題的方法是創建開發電腦名稱的列表,如果應用程序是在這些PC中的一個運行我只能叫SetInitializer(重新創建數據庫)。對於任何其他機器,我假設數據庫已經部署在那裏。 – 2011-04-07 17:54:46

3

在SQL服務器中爲您的應用程序設置登錄名。給該用戶dbcreator權限(通過右鍵單擊登錄,轉到服務器角色,並檢查「dbcreator」複選框)

相關問題