2011-10-11 41 views
1

我有一個基於實體框架的MVC應用程序鏈接到SQL服務器。爲什麼設置「DropCreateDatabaseIfModelChanges」時Entity Framework無法登錄到SQL Server?

這不是一個生產服務器,所以我使用實體框架代碼優先,並在模式更改時利用代碼優先/刪除數據庫。

我有以下連接字符串:

<add name="MyDbContext" 
    connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=appdb;User Id=xxx;Password=yyy;" 
    providerName="System.Data.SqlClient" /> 

我有EF/SQL的各種問題,到最後,我創建了一個新的用戶與sysadmin服務器角色,我創建了數據庫appdb,設置新用戶的默認數據庫爲appdb,在User Mapping下,我給用戶db_owner權限(在用戶和默認模式下,它表示dbo)。

無論如何,一切都按預期工作後,我這樣做 - 數據庫被刪除/重新創建所需的表。

但是,我現在已經改變了我的課程。使用DropCreateDatabaseIfModelChanges導致一個黃色畫面Unable to login to SQL Server with user:xxx錯誤和SQL服務器日誌顯示Login failed for user 'xxx'. Reason: Password did not match that for the login provided. [CLIENT: <local machine>]

如果我啓動上調試應用程序,它顯示以下內容: This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection.

如果我改變從DropCreateDatabaseIfModelChangesDropCreateDatabaseAlways - 一切正常預計....我可以改回來,並繼續使用應用程序沒有問題。

我真的不明白這一點,並想知道是否有人知道發生了什麼?

回答

3

嘗試將Persist Security Info=True添加到您的連接字符串中。

編輯:

設置堅持安全信息,以真正使數據庫連接保持敏感的用戶信息=密碼。我不知道在刪除和重新創建數據庫時EF做了什麼神奇的工作,但它最有可能重置連接狀態並需要在打開的連接上進行新的身份驗證。沒有堅持安全信息打開連接不能再次驗證用戶,因爲它不知道他的密碼。

Btw。您也可以嘗試下載EFv4.1 Update 1或更高版本的EFv4.2。我認爲它應該解決這個問題。

+0

這工作得很好! + 1 /答案。非常感謝......儘管有人想爲自己學習問題而不是爲每個問題提出問題(儘管目前似乎沒有這樣的方式!),但我不認爲你可以解釋一下這個問題/究竟是什麼錯誤? – Wil

相關問題