[英]EF6 migrations (LocalDb) update-database login failed
VS 2013 MVC5 代碼第一個項目。
我正在使用 MVC5教程完成EF6的 ASP.NET 入門,以了解最新的更改,但我遇到了遷移問題。 在第一個模塊中,使用數據庫初始值設定項創建數據庫:
<contexts>
<context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
<databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
</context>
</contexts>
和這個連接字符串:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
這工作正常。 在 Code First 遷移和部署模塊遷移中設置。 初始化程序被注釋掉,DB 的名稱更改為 ContosoUniversity2:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContosoUniversity2;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
當update-database
從 Packager Manager Console 運行時,它失敗並顯示錯誤消息:
Cannot open database "ContosoUniversity2" requested by the login. The login failed.
Login failed for user 'MyMachine\MyUser'.
我已經用相同的用戶和相同的結果多次重新運行這兩個場景。 如果我將Initial Catalog
更改為AttachDbFilename=|DataDirectory|\\ContosoUniversity2;
update-database
成功(數據庫現在位於項目的 App-Data 文件夾中,而不是用戶配置文件的根目錄中):
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0; AttachDbFilename=|DataDirectory|\ContosoUniversity2;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
不過,您必須在部署時使用Initial Catalog
。 生產 connectionString 在 Web.Release.Config 中單獨設置,以便可行。
問題是為什么需要修復,為什么Initial Catalog
不能在開發端與update-database
一起使用?
更新 1:
問題不在於遷移,而在於 LocalDb
MyUser
在SQLExpress
( sysadmin
) 中擁有完全權限。 我可以登錄到SSMS
下MyUser
和全面管理DBs
。 我進行了幾次測試。 即使我將教程的初始數據庫創建為MyUser
,如果我從頭開始重建應用程序並使用databaseInitialzer
它現在會引發登錄失敗錯誤。 如果我在Admin
下運行VS
, databaseInitialzer
和update-database
正常工作。 如果我那么復制DBs
從Admin's
用戶配置文件根MyUser's
,然后運行VS
,而不是作為Admin
,登錄時為MyUser
兩個databaseInitialzer
和update-database
,然后工作,如果DB
是現有之前。
如果我將connectionString
更改為AttachDbFileName
並運行databaseInitialzer
和update-database
MyUser
可以在App_Data
文件夾中創建一個DB
,證明MyUser
具有DB
創建權限。 MyUser
顯然對其自己的用戶配置文件的根擁有完全權限。 LocalDb實現有一些問題。
有沒有人對這個問題有任何見解?
如果刪除 DB 文件,它仍會在 SqlLocalDB 中保持注冊狀態。 如果 LocalDb 掛斷了無法附加(手動刪除數據庫文件后)或登錄失敗,請在此處查看 JSobell 和 CodingwithSpike 的答案:
ef5-cannot-attach-the-file-0-as-database-1 。
從 PM 控制台運行“sqllocaldb.exe stop v11.0”和“sqllocaldb.exe delete v11.0”
更新:
使用 SSMS 更容易。 服務器名稱:(本地)\\v11.0,Windows 身份驗證。 這確實是管理 localdb 數據庫的最佳方式。
我正在使用 VS 2013 和 EF6.1 。
當我使用遷移和刪除數據庫時,我遇到了類似的錯誤。 我無法再次重新創建數據庫。 發現由於 SQLExpress 本地數據庫實例在后台運行並保持已刪除的數據庫連接而導致的錯誤。
以下是處理這種情況的步驟。
我將標准安全性更改為可信連接
服務器=myServerAddress;數據庫=myDataBase;Trusted_Connection=True;
在 appsetting.json 中,您可以編寫此代碼
`{
"ConnectionStrings": {
"onlineStoreDB": "Server=.;Database=onlineStore;Trusted_Connection=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}`
它對我有用。
從連接字符串交換
數據源=(LocalDb)\\v11.0;
到
服務器=.\\SQLExpress;
這幫助我在遷移過程中使用 Code First 技術
這將解決您的問題,您可以根據需要更新和添加盡可能多的方法和屬性到模型
注意:第 1 步{如果您按照教程啟動了數據庫}
從 PM 控制台:
啟用遷移 -ContextTypeName ContosoUniversity.DAL.SchoolContext
add-migration 初始
更新數據庫
我有點晚了,但在使用 MVC5 進行 EF6 入門時遇到了同樣的問題。
該問題是由於示例中無效的數據庫初始化而出現的。
改變
public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
到
public class SchoolInitializer : CreateDatabaseIfNotExists<SchoolContext>
它將創建沒有問題的數據庫。
默認情況下,示例中使用的初始化方法不會創建新數據庫。 不確定它是否是一個錯誤。
'PM> enable-migrations Enable-Migrations 已過時。 使用 Add-Migration 開始使用 Migrations。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.