簡體   English   中英

EF6 遷移 (LocalDb) 更新數據庫登錄失敗

[英]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

MyUserSQLExpress ( sysadmin ) 中擁有完全權限。 我可以登錄到SSMSMyUser和全面管理DBs 我進行了幾次測試。 即使我將教程的初始數據庫創建為MyUser ,如果我從頭開始重建應用程序並使用databaseInitialzer它現在會引發登錄失敗錯誤。 如果我在Admin下運行VSdatabaseInitialzerupdate-database正常工作。 如果我那么復制DBsAdmin's用戶配置文件根MyUser's ,然后運行VS ,而不是作為Admin ,登錄時為MyUser兩個databaseInitialzerupdate-database ,然后工作,如果DB是現有之前。

如果我將connectionString更改為AttachDbFileName並運行databaseInitialzerupdate-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 本地數據庫實例在后台運行並保持已刪除的數據庫連接而導致的錯誤。

以下是處理這種情況的步驟。

  1. 刪除數據庫文件(.mdf 和 .ldf)文件。
  2. 從您的應用程序中刪除遷移文件夾。
  3. 從服務器資源管理器數據連接中刪除到該數據庫的任何數據庫連接。
  4. 轉到 windows 命令提示符(如果 VS 2012 或更早版本,您必須使用 VS 命令提示符)。
  5. 運行“sqllocaldb.exe stop v11.0”(這將停止v11.0服務)
  6. 運行“sqllocaldb.exe delete v11.0”(這將刪除v11.0服務)
  7. 轉到 Visual Studio 中的包管理器控制台。
  8. 運行“Enable-Migrations”(這將創建遷移文件夾和內容)
  9. 運行“Add-Migration init”(這會將更改構建到下一次遷移)
  10. 運行“Update-Database”(這將再次創建數據庫)

我將標准安全性更改為可信連接

服務器=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 控制台:

  1. 啟用遷移 -ContextTypeName ContosoUniversity.DAL.SchoolContext

  2. add-migration 初始

  3. 更新數據庫

我有點晚了,但在使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM