簡體   English   中英

在 EF4 中自動創建數據庫的問題

[英]problems with automatic creation of the database in EF4

我正在學習帶有實體框架代碼的 ASP.NET MVC 3。 我正在學習教程,並下載了相應的解決方案以在本地計算機上進行測試。 現在,我不太了解的是關於數據庫的自動創建(如果磁盤上尚不存在該數據庫)。 我第一次運行應用程序時,為我創建了數據庫。 沒關系。

這是 Web.config 中的部分

<add name="BlogContext" 
     connectionString="Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC.mdf;Integrated Security=SSPI"
     providerName="System.Data.SqlClient" /> 

但是我有兩個問題:

第一個。 出於測試目的,我刪除了磁盤上的數據庫並再次運行該解決方案。 我以為數據庫會自動創建,但我錯了:我收到以下錯誤消息:

{"Unable to open the physical file \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf.mdf\". Operating system error 2: \"2(failed to retrieve text for this error. Reason: 15105)\".\r\nCannot open database \"CodeFirstMVC.mdf\" requested by the login. The login failed.\r\nLogin failed for user 'sa'.\r\nFile activation failure. The physical file name \"c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2008\\MSSQL\\DATA\\CodeFirstMVC.mdf_log.LDF\" may be incorrect."}

我注意到,如果我更改了 Web.config 中的文件名,那么數據庫將再次成功創建。 你能給我解釋一下嗎? 為什么我必須更改數據庫名稱才能讓它再次運行?

第二。 數據庫在位於 C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA 的文件夾中創建。 我想將我的數據庫存儲在 App_Data 目錄中。 我該如何進行?

Initial catalog不是文件路徑。 它是數據庫的名稱。 AttachDbFilename用於指定文件,因此您的連接字符串應如下所示:

Data Source=.\SQL2008;Initial Catalog=CodeFirstMVC;AttachDbFilename=|DataDirectory|CodeFirstMVC.mdf;Integrated Security=SSPI

在哪里|DataDirectory| 指示 SQL 服務器使用本地應用程序數據目錄而不是全局 SQL 服務器數據目錄。 web 應用程序的本地數據目錄是App_Data

編輯:

我剛剛注意到您可能正在使用完整的 SQL 服務器而不是 SQL 服務器快遞。 據我所知,在 App_Data 中自動創建數據庫是 SQL 服務器快遞的功能。 這也解釋了第一個錯誤,因為 SQL 服務器創建了名為 CodeFirstMVC.mdf 的數據庫,並將數據庫存儲在 CodeFirstMVC.mdf.mdf 文件中的全局數據目錄中,並將事務日志存儲在 CodeFirstMVC.mdf.ldf 文件中。 它還在內部注冊了該數據庫。 通過刪除文件,您並未從 SQL 服務器中刪除數據庫。 您只是破壞了它的功能,但 SQL 服務器仍然認為數據庫存在。 這也是為什么您必須更改名稱才能使其正常工作的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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