2016-08-01 74 views
-2

我是ASP.NET MVC的新手,只是搞亂了它,並試圖瞭解它是如何工作的。所以我決定對使用默認ApplicationDbContext訪問的數據庫進行查詢。通常,如果數據庫在此之前沒有被實例化,那麼這個查詢將確保首先創建數據庫,然後進行查詢,對嗎?好了,這裏就是我所做的:ASP.NET MVC未能創建數據庫

// This is the default Index action in the Home controller: 
public ActionResult Index() 
{ 
    var db = new ApplicationDbContext(); 
    var usersCount = db.Users.Count(); 

    return View(); 
} 

我知道查詢是毫無意義的,但它的唯一目的就是爲它生成數據庫。事情就是這樣。嘗試執行查詢時(方法的第二行),我得到一個System.Data.SqlClient.SqlException

即使在檢查App_Data文件夾時,我看到數據庫未創建。這可能是什麼原因?奇怪的是,這可以在我的臺式電腦上使用,但不能在我的筆記本電腦上使用。但是我注意到,當我在連接字符串中輸入無效的數據源(例如Data Source =。)時,我的臺式計算機上出現同樣的異常。所以也許會導致這種行爲的LocalDb發生了一些事情。

連接字符串:

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-DefaultProject-20160731061747.mdf;Initial Catalog=aspnet-DefaultProject-20160731061747;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

這是一個完整的異常:

An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 52 - Unable to locate a Local Database Runtime installation. Verify that SQL Server Express is properly installed and that the Local Database Runtime feature is enabled.)

我會很感激,如果有人能拿出一個解決方案!

P.S:如果將數據源更改爲我的SQL Server Express服務器名稱,我的筆記本電腦上的所有內容都可正常工作。

+1

這是通用數據庫連接失敗的問題。你的連接字符串有些問題,或者服務器沒有配置爲接受連接,或者防火牆阻止了它,或者SQL沒有安裝......等等。 – TZHX

+0

我已經經歷過了。它不回答我的問題。每個ASP.NET MVC應用程序都帶有一個ApplicationDbContext和Models,因此編寫代碼並不是問題。 @MurrayFoxcroft –

+0

我爲SQL投票沒有安裝:否則不應該模板EF啓動創建數據庫,如果它不存在? OP,嘗試在本地主機上設置一個帶有該名稱的空白數據庫,然後運行它。 – jleach

回答

0

聽起來像你的LocalDb實例沒有安裝。這是一些與某些版本的Visual Studio一起安裝的「開發附件」版本的SQL,可能已被取消選擇或者只是簡單地不包括,也許如果原始安裝較舊並且已經通過升級等等。

這篇文章給出了一個體面的說明:How to install localdb separately?

基本上google爲SqlLocalDb.msi並按照說明。

無論如何,我通常更喜歡使用ExpressDb,但這取決於您。

還要注意,連接字符串被認爲是web.config中MVC內容的「鬆散」信息。也就是說,它們往往是特定於機器的,所以如果您要更換機器(或在團隊中工作),您的機器可能會有不同的連接字符串(或本地複製/部分web.config)。

+0

感謝廣泛的答案,你說得很好! 我一定會嘗試手動安裝!我之所以想使用LocalDb,是因爲我想使用Application MVC Context,ASP.NET MVC自動生成的數據庫中的模型和所有好東西。你知道我怎麼能做到這一點,自動生成的數據庫被創建在我的SQL Server Express而不是作爲LocalDb? –

+0

目標數據庫應該無關緊要,無論是在localdb還是在一個快速實例中,EF/DbContext的所有東西應該都是相同的,只需將連接字符串相應地更改爲指向正確的實例 – jleach

+0

因此,如果我只是更改數據源在連接字符串到我的SQL Server Express服務器名稱,一切都應該沒問題? –